我是R的總noob,我試過(並重試)來搜索以下問題的答案,但是我一直沒能得到任何建議解決方案做我感興趣的R:合併數據幀列表
我有一個名爲元素的兩個列表,每個元素指向具有相同佈局的數據幀。
(EDIT)
df1 <- data.frame(A=c(1,2,3),B=c("A","B","C"))
df2 <- data.frame(A=c(98,99),B=c("Y","Z"))
lst1 <- c(X=df1,Y=df2)
df3 <- data.frame(A=c(4,5),B=c("D","E"))
lst2 <- c(X=df3)
(EDIT 2 )
S o似乎將多個數據幀存儲在列表中是一個壞主意,因爲它會將數據幀轉換爲列表。所以我會出去尋找另一種存儲一組命名數據幀的方法。
通常,兩個元素中元素的名稱可能部分重疊,完全重疊或根本不重疊。
我正在尋找一種方式將兩個清單合併成一個列表:
<some-function-sequence>(lst1, lst2)
->
c(X=rbind(df1,df3),Y=df2)
的東西-resulting這樣的:
[編輯:語法更改爲正確反映所需的結果(列表的數據的幀)] $ X AB 11.一種 2 2 B 3的3C 4 4 d 5 5] E
$X.B
A B
1 98 Y
2 99 Z
即:
- IF列表包含相同的元件名稱,每個名稱指向一個數據幀,然後我想「rbind」從這兩個數據幀的行和分配所得到的數據幀到相同的元素名稱在結果列表中。
- 否則,應將兩個列表中的元素名稱和數據幀複製到結果列表中。 :
我已經從一個數字,如討論試圖解決方案
- 但我一直沒有找到合適的解決方案。一個普遍的問題似乎是數據框最終被應用'mapply/sapply/merge/...'轉換爲列表 - 並且通常也以我不感興趣的方式切片和/或合併。 :)
任何幫助,將非常感謝!
[溶液] 溶液似乎是收集數據幀list(...)
之後由Pierre提出的解決辦法似乎得到所需的結果時改變使用的c(...)
。
花一些時間來創建一些示例數據幀。僞代碼並不足以描述你正在使用的內部結構。 'c(a =,..'會將數據幀分成列表元素,我懷疑你是真實的數據反映了這一點 –
如果你有數據存儲在列表中在'list(a = df1,b = df2)'中,你可以使用split和rbind'lapply(split(c(lst1,lst2),names(c(lst1,lst2))),function(lst)do。電話(rbind,lst))' –
感謝您的回覆Pierre。我已經嘗試了上面的建議,但一直未能實現。我已經在示例中添加了一些示例數據以及運行結果 – RBA