例如,有以下data.table:
dt <- data.table(x = list(1:2, 3:5, 6:9), y = c(1,2,3))
# x y
# 1: 1,2 1
# 2: 3,4,5 2
# 3: 6,7,8,9 3
我需要创建一个新的data.table,其中y列的值将附加到存储在x列中的列表中:
# z
# 1: 1,2,1
# 2: 3,4,5,2
# 3: 6,7,8,9,3
我尝试了lapply,cbind,list,c函数。但我无法得到我需要的桌子。
更新: 这个问题与paste two data.table columns不同,因为使用粘贴函数或类似的东西的简单解决方案不起作用。
答案 0 :(得分:2)
这样做
# Merge two lists
dt[, z := mapply(c, x, y, SIMPLIFY=FALSE)]
print(dt)
x y z
1: 1,2 1 1,2,1
2: 3,4,5 2 3,4,5,2
3: 6,7,8,9 3 6,7,8,9,3
删除原始的x和y列
dt[, c("x", "y") := NULL]
print(dt)
z
1: 1,2,1
2: 3,4,5,2
3: 6,7,8,9,3
答案 1 :(得分:1)
如果您希望将多个列组合到一个列中,我想建议一种针对此类任务的一般方法
包含多列的示例数据
res <- melt(dt, measure.vars = names(dt))[, .(.(unlist(value))), by = rowid(variable)]
res$V1
# [[1]]
# [1] 1 2 1 4 5 6
#
# [[2]]
# [1] 3 4 5 2
#
# [[3]]
# [1] 6 7 8 9 3 5 6 7 8
解决方案
unlist
此处的想法是按组转换为长格式,然后转换为list
/ value
(由于生成的{{1}}列中的不同类别,您将收到警告)