gpt4 book ai didi

list - 如何在R的列表中合并具有不同长度的向量?

转载 作者:行者123 更新时间:2023-12-04 13:53:40 25 4
gpt4 key购买 nike

将列表中包含的以下向量组合时出现问题:

x <- list(as.numeric(c(1,4)),as.numeric(c(3,19,11)))
names (x[[1]]) <- c("species.A","species.C")
names (x[[2]]) <- c("species.A","species.B","species.C")

给出以下列表:

> x
> [[1]]
>种A种
> 1 4
> [[2]]
>种.A种.B种.C
> 3 19 11

使用do.call函数将它们组合: y<- do.call(cbind,x)
给出:

> y
> [,1] [,2]
>种.A 1 3
>种类。B4 19
>种类C 1 11

而我想获得这个:

> [,1] [,2]
>种.A 1 3
>物种.B NA 19
>种类C 4 11

最佳答案

首先需要准备长度完全相同的特定向量,最终需要一起给cbind,这需要为R提供更多帮助。否则(如您所见),R使用其通常的回收规则填充矩阵。

尝试这样的事情:

spp <- paste("species", c("A", "B", "C"), sep=".")

x2 <- lapply(x, FUN=function(X) X[spp])
mat <- do.call("cbind", x2)
row.names(mat) <- spp

mat
[,1] [,2]
species.A 1 3
species.B NA 19
species.C 4 11

编辑:正如Brian在评论中提到的那样,它可以变得更紧凑(但要牺牲一些可读性)。您使用哪一个只是一个品味问题:
mat <- do.call("cbind", lapply(x, "[", spp))
row.names(mat) <- spp

关于list - 如何在R的列表中合并具有不同长度的向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8746587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com