gpt4 book ai didi

r - 如何根据名称向量聚合列表中的矩阵?

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

我想根据存储在向量中的名称聚合(求和)列表中的矩阵。这里有一些示例数据:

lst <- list("111"=matrix(c(1, 0, 6, NA, 1, 0),
nrow = 1, byrow = T),
"112"=matrix(c(6, 2, 2, 0, 3, NA),
nrow = 1, byrow = T),
"113"=matrix(c(2, 3, 0, 0, 1, 1),
nrow = 1, byrow = T))
agg.nam <- c(111,113)

我的预期结果是:
> res
$
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 3 3 6 0 2 1

因此,将第一个和第三个矩阵相加(na.rm=TRUE)。

我首先尝试对 agg.nam 进行子集化:
lapply(lst, function(x) x[, which(names(x) %in% agg.nam)] )

但我在这一点上已经失败了,没有汇总。

最佳答案

您可以使用以下方法将相关列表元素抓取到矩阵中:

do.call(rbind, lst[as.character(agg.nam)])
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 1 0 6 NA 1 0
# [2,] 2 3 0 0 1 1

然后只需调用 colSumsna.rm=TRUE (感谢@docendodiscimus 指出了这种简化):
colSums(do.call(rbind, lst[as.character(agg.nam)]), na.rm=TRUE)
# [1] 3 3 6 0 2 1

如果矩阵有多行,上面的简化就不会真正起作用,下面的方法会做得更好:
# Grab relevant list elements
mats <- lst[as.character(agg.nam)]

# Replace any instance of NA with 0
mats <- lapply(mats, function(x) { x[is.na(x)] <- 0 ; x })

# Sum them up
Reduce("+", mats)
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 3 3 6 0 2 1

关于r - 如何根据名称向量聚合列表中的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886937/

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