我正在尝试cbindunnestas.data.table部分嵌套的列表。

id <- c(1,2)
A <- c("A1","A2","A3")
B <- c("B1")
AB <- list(A=A,B=B)
ABAB <- list(AB,AB)
nested_list <- list(id=id,ABAB=ABAB)

id的length与ABAB相同(本例中为2)。我不知道如何unlist此列表的一部分(ABAB)和cbind此列表的另一部分(id)。这是我想要的结果作为data.table:
data.table(id=c(1,1,1,2,2,2),A=c("A1","A2","A3","A1","A2","A3"),B=rep("B1",6))
   id  A  B
1:  1 A1 B1
2:  1 A2 B1
3:  1 A3 B1
4:  2 A1 B1
5:  2 A2 B1
6:  2 A3 B1

最佳答案

我还没有针对更一般的情况进行测试,但这适用于OP示例:

library(data.table)

as.data.table(nested_list)[, lapply(ABAB, as.data.table)[[1]], id]
#   id  A  B
#1:  1 A1 B1
#2:  1 A2 B1
#3:  1 A3 B1
#4:  2 A1 B1
#5:  2 A2 B1
#6:  2 A3 B1

或另一个选择(可能更快,但更详细):
rbindlist(lapply(nested_list$ABAB, as.data.table),
          idcol = 'id')[, id := nested_list$id[id]]

关于r - 与部分嵌套的列表绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45151431/

10-12 21:35