是否可以在list
中一次创建多个data.table
列?
使用下面的代码创建两个列表列,即c1_list和c2_list,同时按x分组
DT = data.table(x = c('a','a','b','b'),
c1 = c(1,2,3,4),
c2 = c(2,4,6,8))
DT[, .(c1_list = list(c1), c2_list = list(c2)), by = 'x']
# x c1_list c2_list
#1: a 1,2 2,4
#2: b 3,4 6,8
相反,我希望有一种动态的快捷方式,例如
注释:下面的代码不起作用-这只是关于它的外观的建议
DT[, (c('c1_list', 'c2_list')) = lapply(mget(c('c1','c2')), list), by = 'x']
或
DT[, lapply(.SD, list), by = 'x', .SDcols = c('c1','c2')] %>%
setnames(c('c1','c2'), c('c1_list','c2_list')
更新:正如RyanD指出的那样,第二种解决方案有效。
答案 0 :(得分:1)
你可以
DT[, lapply(.SD, list), by = x, .SDcols = paste0("c", 1:2)]
# x c1 c2
#1: a 1,2 2,4
#2: b 3,4 6,8