如何追加列的值?

时间:2017-01-15 09:25:38

标签: r data.table

例如,有以下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不同,因为使用粘贴函数或类似的东西的简单解决方案不起作用。

2 个答案:

答案 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}}列中的不同类别,您将收到警告)