【问题标题】:Convert multiple list variables in to a matrix of desired arrangement将多个列表变量转换为所需排列的矩阵
【发布时间】:2021-03-12 06:18:03
【问题描述】:

我有下面的变量列表,我想将它们转换为具有自定义所需排列的矩阵,

m1 <- c("10","12","13")
m2 <- c("5","6")
m3 <- c("4")

我想将以上 3 个列表值组合到下面的矩阵结构中,其中的排列基于每个列表的索引。如果所有列表中都存在 index(1),则它应该在矩阵生成中采用该值。如果没有对应的Index值,则分配之前的Index值。行数由单个列表的最大值形成,

     [,1] [,2] [,3]
[1,]   10   12   13
[2,]    5    6    6
[3,]    4    4    4

我尝试使用以下代码运行,

mat <- matrix(c(m1,m2,m3),ncol=3,byrow = TRUE)

但是生成的矩阵的输出是,

[,1] [,2] [,3]
[1,]   10   13    6
[2,]   12    5    4

【问题讨论】:

  • 试试rbind(m1,m2,m3) 并手动设置mat[2,3] &lt;- 6 ?

标签: r


【解决方案1】:
mylist <- list(m1, m2, m3)

#make all vectors the same length
mylist <- lapply(mylist, "length<-", max(lengths(mylist)))

#last observation carried forward
library(zoo)
mylist <- lapply(mylist, na.locf)

#rbind
m <- do.call(rbind, mylist)
#     [,1] [,2] [,3]
#[1,] "10" "12" "13"
#[2,] "5"  "6"  "6" 
#[3,] "4"  "4"  "4" 

【讨论】:

  • 当列表只有单个值时,(例如,m1
  • @SSK "上面的代码生成..." 那是不正确的。如果您获得该输出,则您没有运行此处显示的代码。
  • 是的,你是对的。我在计算长度时使用了先前生成的列表。它工作正常!谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2015-01-30
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 2011-01-29
相关资源
最近更新 更多