使用for循环在数据表中创建新列

时间:2018-10-10 16:39:50

标签: r for-loop data.table

有没有一种简单的方法可以在for循环中创建列?我知道这个问题已经在这里问过多次了,我已经尝试过根据自己的情况调整的解决方案

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

来自其中一则帖子,但这没有帮助。我有一个现有的数据表数据,并且试图在for循环中创建列P_1至P_30,然后将它们分配为NULL(我只是想预定义列)。我已经尝试过了:

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

,但没有成功。您能建议任何可行的方法吗?

一个相关的问题-如何在另一个循环中引用那些列,如果我又有一个i_i从1到30的列P_i,那么如何在一个循环中引用data $ 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 :(得分:1)

这是一个data.table的答案-我想您很接近,您只是没有正确的语法在数据表中附加一列:

for (i in 1:30) {
  data[, paste0("P_", i) := "whatever_you_want_your_column_to_contain"]
}