R:合并包含向量和标量的列表

时间:2017-11-14 12:02:04

标签: r

我有N个列表,它们有一些相同的列名。这是一个有两个列表的MWE:

ls <- list()
ls[[1]] <- list("a"=1:2,
                "b"=20,
                "c"=numeric(0))
names(ls[[1]]$a) <- c("a1", "a2")

ls[[2]] <- list("a"=3:4,
                "b"=30,
                "c"=1:4,
                "d"="f")
names(ls[[2]]$a) <- c("a1", "a2")

是否可以将这些合并到结果列表lsRes中,其中lsRes具有以下属性:

  1. lsRes$a包含两个元素,其中第一个是命名向量 c(1,2)(名称为c(a1,a2)),第二个为命名向量c(3,4) (姓名(c(a1.a2)))
  2. lsRes$b包含两个元素,第一个是20,第二个是30

  3. lsRes$c包含两个元素,第一个是数字(0),第二个是1:4

  4. lsRes$d包含 两个元素,第一个是NA,第二个是&#34; f&#34;
  5. 我查看了thisthis,但他们描述了不同的情况

1 个答案:

答案 0 :(得分:1)

假设我们需要将输出也作为list,我们创建公共names,然后将那些不是任何常用名称分配给NA

nm1 <- unique(unlist(sapply(ls, names)))
lsRes <- lapply(ls, function(x) {x[setdiff(nm1, names(x))] <- NA; x})
lengths(lsRes)
#[1] 4 4

如果我们需要list个4个元素,请使用transpose

library(purrr)
lsRes %>%
      transpose