Обробка даних і редагування таблиць в r
Структура таблиці і зміна типів даних
Кращий спосіб для закріплення нових знань - це практика. Тому ми продовжимо працювати з таблицею фізичних даних студентів одного з військових вузів "voenvuz". Отже, завантажимо знайому вже нам таблицю в Rgui (таблицю можна завантажити тут).
Функції head і str
Про типах даних
Чому важливо правильно розпізнати тип даних в стовпчиках таблиці? Тому що при проведенні статистичних тестів, інформація про тип даних враховується і впливає на результат.
У мові R можна виділити 5 основних типів даних, що зберігаються в стовпцях таблиці:
Є також комплексний (complex) і сирої (raw) типи даних, але вони рідко зустрічаються, і тому я про них тут писати не буду. Пропущені дані позначаються як "NA" (від англ. Not available - недоступно), і тоді R ігнорує їх.
Змінимо типи даних на практиці
Йдемо далі, стовпець "Age" був правильно ідентифікований як цілочисельний. А ось стовпці "Height" і "Weight" є скоріше числовими, тому що можуть містити проміжні значення, наприклад 182.5. Переробимо їх з типу Integer в тип Numeric:
voenvuz $ Height <- as.numeric(voenvuz$Height)
voenvuz $ Weight <- as.numeric(voenvuz$Weight)
У підсумку, повторивши команду str (voenvuz). ми повинні отримати ось таку картинку.
Редагування елементів таблиці
Іноді виникають ситуації, коли необхідно вставити в таблицю стовпець або рядок, змінити значення елемента або назва колонки. Наша таблиця - не виняток і потребує доопрацювання.
Додавання рядків
Додамо в таблицю дані про двох нових студентів: Івана і Олега. Для цього необхідно створити нову структуру - список (list). У список ми по порядку вносимо параметри, що збігаються зі структурою таблиці (нагадаю, що в лапках ми пишемо нечислові типи даних):
Ivan <- list("Ivan", 21, 175, 67, "2", "+")
Oleg <- list("Oleg", 24, 189, 82, "1", "+")
Після, за допомогою функції rbind (від англ. Row bind, що дослівно означає "зв'язати рядки") ми об'єднаємо ці два списки з нашою таблицею:
voenvuz <- rbind(voenvuz, Ivan, Oleg)
Додавання стовпців
Тепер у нас в таблиці два Івани і два Олега. В даному випадку добре було б прописати для кожного студента свій ідентифікаційний номер (ID), щоб не заплутатися, хто є хто. Для цього створимо структуру, яка називається вектор (послідовність елементів одного типу). У нього ми запишемо послідовність від 1 до 22, так, щоб у кожного з наших 22 студентів був свій унікальний ID:
ID <- c(1:22)
Тепер об'єднаємо наш вектор з таблицею, скориставшись функцією cbind (від англ. Column bind):
voenvuz <- cbind(voenvuz, ID)
Не забудьте поміняти тип даних нового стовпчика на символьний:
voenvuz $ ID <- as.character(voenvuz$ID)
В якості ще одного прикладу додавання нових стовпців з даними в таблицю, розрахуємо індекс маси тіла (BMI) для кожного студента. Для цього, ми скористаємося новим способом: напишемо математичну формулу індексу на мові R і дамо їй нове ім'я стовпця "BMI" всередині нашої таблиці:
voenvuz $ BMI <- voenvuz$Weight / (voenvuz$Height * 0.01)^2
Перевірте, що вийшло, використовуючи вже знайомі нам функції head і str
Копіювання значка
Існує щодо "універсальна формула" для видалення елементів таблиці: new.data <- my.data[. ]
Для того, щоб коректно її використовувати необхідно запам'ятати кілька правил:
- Після імені таблиці простір всередині квадратних дужок слід розділити на дві частини коми.
- Все, що знаходиться до коми, відноситься до рядків, все що після - до стовпців.
- Поставте мінус перед номером стовпця або номером рядка, яку збираєтеся видалити.
- Якщо таких елементів декілька, використовуйте функцію c (.). всередині дужок перерахування елементів через кому.
У нашому випадку, видаляти з таблиці нічого не треба, але я покажу пару прикладів, назвавши "укорочені" таблиці іменами "trash1", "trash2", "trash3", "trash4":
trash1 <- voenvuz[. -7] # удалим раннее созданный столбец "ID"
trash2 <- voenvuz[ -2, ] # удалим строку под номером 2 (данные Петра)
trash3 <- voenvuz[ -c(1,2,3,4,5,6,7,8,9,10), ] # удалим первые десять строк
trash4 <- voenvuz[ -c(1:10), ] # то же самое, только код короче
Зміна імен стовпців і даних в осередках:
Перейменуємо колонку "Rhesus.factor" на вкорочене "Rhesus". Для цього потрібно викликати функцію names. написати в параметрах функції ім'я таблиці і номер стовпця, і привласнити йому нове ім'я:
names (voenvuz) [6] <- "Rhesus"
Зміна дані в осередках таблиці не представляє особливої складності. У квадратних дужках прописуємо координати потрібної осередку (до коми - рядок, після коми - стовпець) і присвоюємо нове значення:
voenvuz [1, "Name"] <- "Vanya"
Після всіх наших маніпуляцій ми повинні отримати ось таку таблицю даних:
Фільтрація і сортування даних
Того ж результату ми доб'ємося, якщо будемо використовувати логічні оператори ">" (більше) і "!" (Виключити):
voenvuz.final <- voenvuz[!voenvuz$Age> 23,]
Отже, ми отримали фінальну версію таблиці "voenvuz.final". Залишилося лише упорядкувати стовпці:
voenvuz.final <- voenvuz.final[,c("Name", "ID", "Age", "Height", "Weight", "BMI", "Blood.group", "Rhesus")]
І зробити сортування даних по імені студентів, використовуючи функцію order.
voenvuz.final <- voenvuz.final[order(voenvuz.final$Name),]
Після завершення редагування таблиці, оновимо імена рядків, тому що Зараз вони не відповідають дійсності, і виведемо таблицю на екран, ввівши ім'я таблиці в консоль:
rownames (voenvuz.final) = c (1: length (voenvuz.final $ ID))
voenvuz.final
висновок
Описані вище способи редагування даних в таблиці не унікальні, існує безліч інших методів і команд, що дозволяють отримати бажаний результат. Я розповів лише про найбільш простих і часто використовуваних. Для більш детального ознайомлення з цією темою я хотів би порекомендувати два джерела англійською мовою: