将data.table中列表中的值分配/提取到列

时间:2018-01-25 09:33:04

标签: r data.table

我试图从列列表中获取数据并将其分配给不同的列 - 假设列表中的向量都具有固定长度。

 require(data.table)

d <- data.table(id=1:3,l=list(c(1,2),c(5,6),c(7,9))) 
# d
#    id   l
# 1:  1 1,2
# 2:  2 5,6
# 3:  3 7,9


d[,':='(l1 = l[[1]][1],l2=l[[1]][2])]

# d
#    id   l l1 l2
# 1:  1 1,2  1  2
# 2:  2 5,6  1  2
# 3:  3 7,9  1  2

# EXPECTED
# d
#    id   l l1 l2
# 1:  1 1,2  1  2
# 2:  2 5,6  5  6
# 3:  3 7,9  7  9

2 个答案:

答案 0 :(得分:2)

我们可以使用Map

d[, paste0("l", 1:2) := do.call(Map, c(f = list, l))]
d
#   id   l l1 l2
#1:  1 1,2  1  2
#2:  2 5,6  5  6
#3:  3 7,9  7  9

如果我们需要vector作为输出,请将f=list更改为f=c

d[, paste0("l", 1:2) := do.call(Map, c(f = c, l))]

答案 1 :(得分:0)

好吧,显然我必须强行进行逐行治疗。在这种情况下,按ID:

 d[,':='(l1 = l[[1]][1],l2=l[[1]][2]),by=.(id)]