Menu
Coddy logo textTech

Столбцы и строки

Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 43 из 64.

df$col и df[["col"]] возвращают столбец как обычный вектор, поэтому с ним работают все функции для векторов. [[ ]] принимает имя столбца, сохранённое в переменной:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people$age)
print(mean(people$age))
col <- "city"
print(people[[col]])

Результат:

[1] 36 22 41
[1] 33
[1] "london" "paris"  "rome"  

Квадратные скобки принимают [row, column], как в матрице. Пустая сторона выбирает всё, а столбцы можно выбирать по имени:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people[2, ])
print(people[, c("name", "city")])

Результат:

  name age  city
2   bo  22 paris
  name   city
1  ada london
2   bo  paris
3   cy   rome

Одна ячейка — это df[row, column], и присваивание ей нового значения изменяет это значение. Присваивание целому столбцу работает так же:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people[3, "age"])
people[3, "age"] <- 42
people$city <- toupper(people$city)
print(people)

Вывод:

[1] 41
  name age   city
1  ada  36 LONDON
2   bo  22  PARIS
3   cy  42   ROME

Чтобы пройти по строкам одну за другой, выполните цикл по seq_len(nrow(df)) и прочитайте каждую ячейку с помощью df[i, "col"] или df$col[i]:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
for (i in seq_len(nrow(people))) {
  cat(people$name[i], "lives in", people[i, "city"], "\n")
}

Результат:

ada lives in london 
bo lives in paris 
cy lives in rome 
challenge icon

Задание

Легко

Завершите person_card(df, i). Верните по одной строке для каждого столбца в строке i в формате name: bo, с именем столбца и значением в этой строке, в порядке расположения столбцов.

Предоставленный код считывает таблицу из входных данных с помощью read.csv(text = input): первая строка содержит имена столбцов, а каждая следующая строка — одну строку таблицы со значениями, разделёнными запятыми. Последняя строка входных данных содержит i, а код выводит каждую возвращённую строку.

Попробуйте сами

person_card <- function(df, i) {
  # Напишите свой код здесь
  character(0)
}

# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
i <- as.numeric(input[length(input)])
cat(person_card(df, i), sep = "\n")
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор R