Использование цикла for (или функций apply-type) для создания новых столбцов с конкретными именами, найденными в ранее определенном векторе в R - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь добавить столбцы в фрейм данных, где каждый новый столбец представляет месяц (например, январь, февраль, март и т. Д.). Я пытаюсь найти способ создания новых столбцов в цикле, в котором яможет назначать конкретные имена каждому столбцу на основе содержимого вектора.Это то, что я пробовал до сих пор, но безуспешно.

my.data <- data.frame("var1" = 1:10, "var2" = 11:20)
months <- c("January", "February", "March", "April", "May", "June", "July", 
"August", "September", "October", "November", "December")
new.column.I.want.to.add <- rep(0, 10)

for (i in months) {
  my.data$i <- cbind(my.data, new.column.I.want.to.add)
}

Очевидно, что это не создает 12 новых столбцов для каждого месяца, заполненного нулями.Как назначить имя столбца с помощью «ih» точки в векторе?

1 Ответ

0 голосов
/ 01 февраля 2019

На самом деле вы можете просто создать новые столбцы, указав новые имена столбцов и присвоив им значение:

my.data <- data.frame("var1" = 1:10, "var2" = 11:20)
months <- c("January", "February", "March", "April", "May", "June", "July", 
            "August", "September", "October", "November", "December")
my.data[, months] <- 0

Затем вы можете заполнить столбцы в цикле for, который будет работать как data.frame.уже имеет правильный размер.

Редактировать

В соответствии с запросом, если вы хотите, чтобы месяцы превышали несколько лет, я бы сначала построил имена столбцов:

years <- 2015:2018
monyear <- as.character(t(sapply(months, paste0, years)))
my.data[, monyear] <- 0

Маленький sidenote: month.name уже встроен в R, и вам не нужно его определять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...