当前位置: 首页 > 知识库问答 >
问题:

将列表中的向量绑定到矩阵的单个列表

栾瑞
2023-03-14

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

输入列表:

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

我将如何编写一个函数,它也可以扩展到合并具有不同长度向量的较长列表?

共有3个答案

赵飞语
2023-03-14

你可以用1rappy调整子列表的长度s,以及2t(mapply)通过选择'[['获得矩阵。

listn <- list(list1, list2, list3)

setNames(lapply(seq(listn), function(x) 
  t(mapply(`[[`, rapply(listn, `length<-`, value=5, how="list"), x))), names(el(listn)))
# $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

如果长度未知,请使用以下代码:

max(rapply(listn, length))
# [1] 5
戚侯林
2023-03-14
匿名用户

a数据。表解决方案,只是为了好玩:

plouf <- list(list1,list2,list3)

lapply(names(list1),function(name){
  lapply(plouf,function(x){
     as.data.table(t(x[[name]]))
     }) %>% 
    rbindlist(.,fill =T) %>%
`colnames<-`(NULL)
}) %>% setNames(names(list1))


$a

1:  1  2  3  4  5
2:  1  2  3  4 NA
3:  1  2  3 NA NA

$b

1:  6  7  8  9 10
2:  6  7  8  9 NA
3:  6  7  8 NA NA

$c

1: 11 12 13 14 15
2: 11 12 13 14 NA
3: 11 12 13 NA NA

第一个循环位于列表名称上。第二个循环循环位于列表列表上,提取每个列表的元素,将其转换为具有唯一行的data.table,以便能够使用rbindlist来填充缺失的列。

没有data.table,如此相似,但不如akrun提出的:

library(plyr)

lapply(names(list1),function(name){
  lapply(plouf,function(x){
    t(x[[name]])%>%
      as.data.frame
  }) %>% 
   rbind.fill %>%
    `colnames<-`(NULL)
}) %>% setNames(names(list1))

卫阳曜
2023-03-14

一种选择是列表列表转置,然后使用cbind将列表元素减少到单个数据集。填充,获取转置(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中将矩阵列转换为向量列表?,包括了如何在R中将矩阵列转换为向量列表?的使用技巧和注意事项,需要的朋友参考一下 如果要使用矩阵的列作为向量,则可以将它们转换为向量列表。要将矩阵列转换为向量列表,我们首先需要将矩阵转换为数据框,然后才能将其读取为列表。这可以作为as.list(as.data.frame(matrix_name))完成。 示例 考虑下面的矩阵- 将矩阵M列转换为向

  • 问题内容: 假设我有一个由列表列表组成的矩阵,如下所示: 同样,假设我有一个具有相同结构的numpy矩阵,称为: 使用numpy,我可以得到这个矩阵的子矩阵,如下所示: 我可以像这样在纯Python中复制numpy矩阵切片: 这不是世界上最容易阅读的东西,也不是最有效的:-) 问题:是否有更简单的方法(在纯Python中)将任意矩阵切片为子矩阵? 问题答案: 您还可以通过定义以下子类来模仿NumP

  • 问题内容: 我有一个类似的名字列表: 以及文档列表,在每个文档中都提到了其中一些名称。 我想获得输出作为共现矩阵,例如: R中有一个解决此问题的方法(创建共现矩阵),但我无法在Python中做到这一点。我正在考虑在Pandas进行此操作,但没有任何进展! 问题答案: 显然,可以根据您的目的进行扩展,但是它会执行以下常规操作:

  • 我有一个返回列表的函数。我试图在drools when子句中调用此函数,并将其绑定到名为l1的变量。如果像这样绑定变量,则子句不会执行。然而,如果我以类似的方式绑定映射,则执行then子句中的语句。我正在使用最新版本的drools。 这是代码 这里规则'test1'执行并打印值。但是我没有看到规则'test2'的任何输出。 任何帮助都将不胜感激。

  • 我在Python熊猫中使用电影镜头数据集。我需要打印矩阵的一个制表符分隔文件在下面。方式 我已经通过以下链接 一个数据集非常庞大,将其放在系列中 二-未提及行的转置 三-尝试使用reindex,以便在一列中获得NaN值 四-和也不起作用 我需要输出,因为它显示我的评级和NaN(当未评级)的电影w. r. t.用户。 另外,我不介意使用numpy、crab、recsys、csv或任何其他python

  • 问题内容: 我想知道从ArrayList转换为Array是否安全/建议?我有一个文本文件,每行一个字符串: 我想将它们读入数组列表,然后将其转换为数组。建议这样做/合法吗? 谢谢 问题答案: 是的,将转换为是安全的。一个好主意取决于您的预期用途。您需要提供的操作吗?如果是这样,请将其保留为。否则转换掉! 输出