r - 将列表中的向量绑定(bind)到单个矩阵列表

标签 r list

我想在不同的列表中加入多个向量并输出一个矩阵列表。这个想法是列表中具有相同名称的所有项目,例如所有 a项目,由行连接为矩阵。增加的复杂性是这些向量可以有不同的长度,所以rbind实现起来并不简单;矩阵中的缺失值可以附加 NA s。

例子

输入列表:

list1 <- list(a = 1:5, b = 6:10, c = 11:15)
list2 <- list(a = 1:4, b = 6:9, c = 11:14)
list3 <- list(a = 1:3, b = 6:8, c = 11:13)

list1
# $a
# [1] 1 2 3 4 5
# 
# $b
# [1]  6  7  8  9 10
# 
# $c
# [1] 11 12 13 14 15
# 

我希望获得的所需输出是一个包含与唯一列表项一样多的矩阵的列表,其中每个矩阵由不同长度的向量组成,这些向量由行限制:

# $a
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    2    3    4    5
# [2,]    1    2    3    4   NA
# [3,]    1    2    3   NA   NA
# 
# $b
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    6    7    8    9   10
# [2,]    6    7    8    9   NA
# [3,]    6    7    8   NA   NA
# 
# $c
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   11   12   13   14   15
# [2,]   11   12   13   14   NA
# [3,]   11   12   13   NA   NA

我将如何编写一个函数来执行此操作,该函数还可以扩展到将更长的列表与不同长度的向量合并?

最佳答案

一种选择是transpose listlist s,然后 reduce list cbind.fill 将元素添加到单个数据集,得到转置( t )并将行名分配给 NULL

library(tidyverse)
library(rowr)
list(list1, list2, list3) %>% 
    transpose %>% 
    map(~ reduce(.x, cbind.fill, fill = NA) %>% 
          t %>% 
         `row.names<-`(NULL))
#$a
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    1    2    3    4    5
#[2,]    1    2    3    4   NA
#[3,]    1    2    3   NA   NA

#$b
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    6    7    8    9   10
#[2,]    6    7    8    9   NA
#[3,]    6    7    8   NA   NA

#$c
#     [,1] [,2] [,3] [,4] [,5]
#[1,]   11   12   13   14   15
#[2,]   11   12   13   14   NA
#[3,]   11   12   13   NA   NA

或使用 base R
do.call(Map, c(f = function(...) {l1 <- list(...)
   do.call(rbind, lapply(l1, `length<-`, max(lengths(l1))))},  
      mget(paste0("list", 1:3))))

关于r - 将列表中的向量绑定(bind)到单个矩阵列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57401290/

相关文章:

r - 如何按个人采样/划分面板数据(最好使用插入符号库)?

r - 按组变量对绘图箱图中的抖动进行着色

r - 从 R 中的每日价格计算月 yield

R 将列表转换为数组

javascript - 有没有办法将数组的内容显示为有序列表但在警告框内

Python - 为类的实例创建列表

python - 索引二维数组/列表

c - 在 malloc 实现中维护空闲列表

python - 预先列出 python

从估计中删除一些因子交互项