Создать новые столбцы в таблице данных с помощью цикла for - PullRequest
0 голосов
/ 10 октября 2018

Есть ли простой способ создания столбцов внутри цикла for?Я знаю, что этот вопрос задавался здесь несколько раз, и я попробовал это решение, приспособленное к моему случаю

for (i in 1:100) {
  eval(parse(text = paste0('a$colum', i, ' <- whatever_you_want_your_column_to_contain')))
}

из одного из постов, но это не помогло.У меня есть данные таблицы данных, и я пытаюсь создать столбцы с P_1 по P_30 в цикле for, а затем назначить их NULL (я просто пытаюсь предварительно определить столбцы).Я пробовал это:

for (i in 1:30) {
  eval(parse(text = paste0('data$P_', i, ' <- NULL')))
}

, но безуспешно.Можете ли вы предложить какой-либо подход, который будет работать?

Смежный вопрос - как ссылаться на эти столбцы в другом цикле, если у меня снова есть столбец P_i, где i от 1 до 30, как ссылаться на данные $ P_i внутри цикла?

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

У меня есть эта таблица данных, чтобы привести пример:

customer_id <- c("1","1","1","2","2","2","2","3","3","3")
account_id <- as.character(c(11,11,11,55,55,55,55,38,38,38))
obs_date <- c(as.Date("2017-01-01","%Y-%m-%d"), as.Date("2017-02-01","%Y-%m-%d"), as.Date("2017-03-01","%Y-%m-%d"),
              as.Date("2017-12-01","%Y-%m-%d"), as.Date("2018-01-01","%Y-%m-%d"), as.Date("2018-02-01","%Y-%m-%d"),
              as.Date("2018-03-01","%Y-%m-%d"), as.Date("2018-04-01","%Y-%m-%d"), as.Date("2018-05-01","%Y-%m-%d"),
              as.Date("2018-06-01","%Y-%m-%d"))
variable <- c(87,90,100,120,130,150,12,13,15,14)    
data <- data.table(customer_id,account_id,obs_date,variable)

, и я обнаружил, что проблема действительно в том, чтобы присвоить этому столбцу значение NULL.потому что когда я делаю это, основываясь на совете поста:

for (i in 1:30) {
   eval(parse(text = paste0('data$P_', i, ' <- 1')))
}

это действительно работает, просто с NULL вместо 1 это не так.Так что это не плохой совет, просто он не работает с NULL.

1 Ответ

0 голосов
/ 11 октября 2018

Вот ответ data.table - я думаю, что вы были близки, у вас просто не было правильного синтаксиса для добавления столбца в таблицу данных:

for (i in 1:30) {
  data[, paste0("P_", i) := "whatever_you_want_your_column_to_contain"]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...