我需要從列表的特定子列表創建數據幀。我知道這個特定子列表中的數據結構是不變的。對於一個列表,我發現do.call()會做的伎倆:將列表的特定子列表強制轉換爲基於R的矩陣/數據幀
lst<-list(l1="aa", l2="ab", l3="ac")
fun.sublst1<-function(n) {
a<-c("a",1,n)
return(a)
}
lstoflst<-lapply(lst, fun.sublst1)
do.call(rbind,lstoflst) # create a data frame from a list
但是,如果我有一個名單列表,我想遍歷一個特定的子表,我不能夠使用do.call (rbind,lstoflst $ A)來創建數據框。
# section list of list
fun.sublst2<-function(n) {
a<-c("a",1,n)
b<-c("b",2)
return(list(A=a,B=b))
}
lstoflst<-lapply(lst, fun.sublst2)
# result should create a dataframe consisting of all sublists $A
t(cbind(lstoflst$l1$A,lstoflst$l2$A,lstoflst$l3$A))
笨拙的代碼看起來就像那樣。
dat<-t(as.data.frame(lstoflst[[1]][[1]]))
for(i in 2:length(lstoflst)) {
dat<-rbind(dat,t(lstoflst[[i]][[1]]))
}
有沒有一個優雅的方式來做到這一點與基地R?我想do.call(rbind,lstoflst,???)和其他一些參數都可以。我想我需要通過索引或索引函數。任何幫助?
我搜索了,但我沒有運氣與我的搜索字詞。可能它已經被解決了。無論如何,希望你能指導我。謝謝
編輯:改變標題,因爲我的例子只產生矩陣作爲結果。
我不知道我關注。你的例子都沒有創建數據框。你知道'c()'創建一個原子向量,而不是一個列表? – joran
嗨,以及我的示例解決方案創建矩陣 - 類(dat)。你是對的。然而,問題是在n個包含m個原子元素的列表的列表元素中創建一個(n x m)數據類型結構。也許我的英語不夠好,無法正確表達自己。此外,我認爲我的R術語知識水平很低。任何不便敬請諒解。 – Sebastian
好吧,我現在看到我的工作中與數據幀矩陣差異的觀點。很顯然,我的示例dat不夠準確。所以,而不是c()我可能應該使用<-list(V1 =「a」,V2 = 1,V3 = n)。但是,我也可以使用矩陣。感謝您澄清它。 – Sebastian