将具有多个元素的列表转换为矩阵

时间:2018-07-05 10:31:01

标签: r dataframe

我有四个数据帧,每个数据帧具有相同数量的记录和相同的列:看起来像这样:

    CURRENT  30DPD   60DPD  90DPD
1   0.56     56.67    67.6  57.67
2   0.24     56.78    7.6   24.67
3   0.32     56.11    66    34.67
4..........

现在从每个df中获取第一行并创建一个列表,然后从每个表中获取第二行,然后从每个表中获取第三行,依此类推。 现在尝试将大列表转换为矩阵,这是我使用的代码:

for ( i in 1:3542) {  
   vec1 <- One[i,]
   vec2 <- two[i,]
   vec3 <- Three[i,]
   vec4 <- Four[i,]
   tab[[i]] <- c(vec1,vec2,vec3,vec4)
   final[[i]] <-matrix(unlist(tab[[i]]),nr=4,nc=4)
}

在列表中,我有3542个元素,使用此代码时出现错误。

  

final [[i]]中的错误<-矩阵(unlist(tab [[i]]),nr = 4,nc = 4):
  提供的元素多于要替换的元素

但是,如果我不使用索引,那么它可以正常工作,但是对于3000个元素,这将非常耗时。知道如何使用列表创建3542个单独的矩阵吗?

谢谢

2 个答案:

答案 0 :(得分:0)

首先请确保列表中元素的数量相同:

length(unique(lengths(your_list)) # should be one

然后看一下其中的类,以查看您是否真的可以/想要将它们强制转换为矩阵:

unique(sapply(your_list, function(x) paste(class(x),collapse= " ")))

那么我认为最简单的方法是先转换为data.frame然后转换为matrix

mat <- as.matrix(as.data.frame(your_list))

答案 1 :(得分:0)

您可以这样做:

s = list(dat1,dat2,dat3,dat4) 
  do.call(Map,c(rbind,lapply(s,function(x)data.frame(t(x)))))