【问题标题】:R: Merge lists containing vectors and scalarsR:合并包含向量和标量的列表
【发布时间】:2017-11-14 12:02:03
【问题描述】:

我有 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 包含两个元素,第一个是 numeric(0),第二个是 1:4

  4. lsRes$d 包含 两个元素,其中第一个是 NA,第二个是“f”

我查看了thisthis,但它们描述的情况不同

【问题讨论】:

    标签: r


    【解决方案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
    

    如果我们需要有 4 个元素的 list,则使用 transpose

    library(purrr)
    lsRes %>%
          transpose
    

    【讨论】:

    • 谢谢。但lsResls 不一样吗?
    • @N08 我有 'd' 的附加元素。你想要一个列表输出还是别的什么?
    • 谢谢。现在是否可以将列表合并在一起以满足上述四个条件?
    • @N08 你需要一个 data.frame 作为输出吗?目前尚不清楚输出的样子
    • 是的,一个data.frame
    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2012-12-22
    • 2014-07-10
    • 2013-08-02
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多