我想将acast()应用于数据框列表并返回新的矩阵列表。
list<-list(df1 = data.frame(vegspecies=c("vsp1", "vsp1", "vsp1", "vsp2",
"vsp2", "vsp2"), species=c("sp1", "sp1", "sp1", "sp2", "sp2", "sp2"),
her=c(0,0,1,0,3,2)), df2 = data.frame(vegspecies="", species="", her=""))
对于单个数据框,该功能正常。
acast(list$df1, vegspecies ~ species, fill=0)
鉴于我的列表还包含空数据帧,我使用tryCatch()忽略错误并检索NULL元素。这似乎也很好。
tryCatch(acast(list$df2, vegspecies ~ species, fill=0), error=function(e) print(NULL))
但是我无法在整个数据框列表中应用它。理想情况下,输出应该是矩阵列表(那些矩阵将具有不同的大小)。我认为错误是我首先创建空列表的方式,但我无法修复它。
wideData <- list(df1 = matrix(), df2 = matrix())
for(i in 1:length(list)){wideData[i] <- tryCatch(acast(list[[i]], vegspecies ~ species, fill=0), error=function(e) print(NULL))}
答案 0 :(得分:0)
我们可以使用lapply
遍历'{1}}'data.frame list
acast`(假设'df2'也是与'df1'相同的数据集,具有相同的列名称,类型等。)
s and apply the
注意:最好不要将res <- lapply(lst, function(x) acast(x, vegspecies ~ species, fill=0))
对象“列表”命名为(类似地将list
命名为“vector”或将vector
命名为“data.frame”)。它可以是任何其他名称。
但是,我们仍然可以在单个data.frame上使用单个data.frame
acast
rbind
对象和'id'列来标识lst
元件
list