Создание таблиц данных
Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 42 из 64.
Таблица данных — это таблица в R: каждый столбец является вектором собственного типа, и все столбцы имеют одинаковую длину — по одному значению в каждой строке. data.frame() создаёт её из именованных векторов:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people)Результат:
name age city
1 ada 36 london
2 bo 22 paris
3 cy 41 romenrow() и ncol() возвращают размер, а names() перечисляет столбцы. В отличие от матрицы, столбцы могут содержать разные типы данных: в данном случае текст и числа.
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(nrow(people))
print(ncol(people))
print(names(people))Вывод:
[1] 3
[1] 3
[1] "name" "age" "city"str() показывает тип и первые значения каждого столбца — это быстрый способ проверить содержимое фрейма данных:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
str(people)Результат:
'data.frame': 3 obs. of 3 variables:
$ name: chr "ada" "bo" "cy"
$ age : num 36 22 41
$ city: chr "london" "paris" "rome"Данные часто поступают в виде текста, по одной строке на запись. read.csv(text = lines) превращает такие строки в таблицу данных, используя первую строку как имена столбцов и автоматически преобразуя числа:
lines <- c("item,qty", "tea,2", "jam,5")
orders <- read.csv(text = lines)
print(orders)
print(sum(orders$qty))Результат:
item qty
1 tea 2
2 jam 5
[1] 7Задание
ЛегкоЗавершите table_info(names, ages). Создайте датафрейм со столбцами name и age из двух векторов. Верните три строки: Rows: с количеством строк, Columns: с именами столбцов, объединёнными с помощью , , и Oldest: с именем в строке с наибольшим возрастом (при совпадении возрастов — первое из них).
Предоставленный код считывает имена и возраст как две строки со значениями, разделёнными запятыми, и выводит каждую возвращённую строку.
Попробуйте сами
table_info <- function(names, ages) {
# Напишите свой код здесь
character(0)
}
# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
cat(table_info(strsplit(input[1], ",")[[1]], as.numeric(strsplit(input[2], ",")[[1]])), sep = "\n")
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки углублённо
Подстроки с substr()Форматирование с sprintf()Разделение и объединениеПоиск в строкахЗамена текстаПовторение — создание имени пользователя4Матрицы
Создание матрицИндексация матрицСводные данные по строкам и столбцамАрифметика матрицПовторение — схема рассадки7Семейство Apply
lapply и sapplyMap и mapplyFilter и FindReduceПовторение — конвейер обработки данных10Продвинутые конструкции управления
Функция switch()Векторизованный ifelse()repeat и breakРекурсивные функцииПовторение — классификатор оценок2Поиск по ключам и значениям
Поиск в именованных векторахПроверка ключейДобавление и удаление ключейПеребор имёнПовторение — биржа акций5Проект — Журнал оценок
Добавление учениковВыставление оценок3Множества и подсчёт
Уникальные значенияОперации с множествамиПроверка принадлежностиПодсчёт с помощью table()Повторение — гости мероприятия6Функции как значения
Анонимные функцииПередача функцийВозврат функцийЗамыкания с состояниемПовторение — правила скидок9Таблицы данных
Создание таблиц данныхСтолбцы и строкиФильтрация строкДобавление и сортировкаПовторение — отчёт о продажах12Проект — Трекер расходов
Запись расходовОбщие расходыПотренируйтесь самостоятельно: Онлайн-компилятор R