我有四个数据帧,每个数据帧具有相同数量的记录和相同的列:看起来像这样:
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个单独的矩阵吗?
谢谢
答案 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)))))