有没有一种简单的方法可以在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。
答案 0 :(得分:1)
这是一个data.table
的答案-我想您很接近,您只是没有正确的语法在数据表中附加一列:
for (i in 1:30) {
data[, paste0("P_", i) := "whatever_you_want_your_column_to_contain"]
}