我试图从列列表中获取数据并将其分配给不同的列 - 假设列表中的向量都具有固定长度。
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
答案 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)]