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

R 将data.table中的列表中的值分配/提取到列,r,data.table,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

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

 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
require(data.table)

d好吧,显然我必须强迫进行粗暴的治疗。在这种情况下,例如通过ID:

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

我们可以使用
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
如果我们需要一个
向量作为输出,请将
f=list
更改为
f=c

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