數據幀我有一個列表的數據幀的形式如下:功能數據幀的列表的,也返回中的R
str(mylist)
List of 2
$ df1:'data.frame': 50 obs. of 4 variables:
..$ var1: num [1:50] 0.114 0.622 0.609 0.623 0.861 ...
..$ var2: num [1:50] -1.221 1.819 0.195 1.232 0.786 ...
..$ var3: num [1:50] -0.14 -1.003 -0.352 0.647 0.424 ...
..$ Y : num [1:50] -1.24 1.38 0.3 2.44 2.09 ...
$ df2:'data.frame': 50 obs. of 4 variables:
..$ var1: num [1:50] 0.114 0.622 0.609 0.623 0.861 ...
..$ var2: num [1:50] -1.221 1.819 0.195 1.232 0.786 ...
..$ var3: num [1:50] -0.14 -1.003 -0.352 0.647 0.424 ...
..$ Y : num [1:50] -1.24 1.38 0.3 2.44 2.09 ...
- attr(*, "class")= chr [1:2] "mi" "list"
我試圖返回的手段對應於正確的變量,也可以作爲一個數據幀列表中的數據幀,看起來像:
> str(dfnew)
'data.frame': 50 obs. of 4 variables:
$ var1: num 0.114 0.622 0.609 0.623 0.861 ...
$ var2: num -1.221 1.819 0.195 1.232 0.786 ...
$ var3: num -0.14 -1.003 -0.352 0.647 0.424 ...
$ Y : num -1.24 1.38 0.3 2.44 2.09 ...
所以,東西做...
dfnew[1,1] <- mean(mylist[[1]]$var1[1], mylist[[2]]$var1[1], na.rm=T)
dfnew[2,1] <- mean(mylist[[1]]$var1[2], mylist[[2]]$var1[2], na.rm=T)
...
dfnew[50,1] <- mean(mylist[[1]]$var1[50], mylist[[2]]$var1[50], na.rm=T)
...
dfnew[1,2] <- mean(mylist[[1]]$var2[1], mylist[[2]]$var2[1], na.rm=T)
...
dfnew[50,4] <- mean(mylist[[1]]$var4[50], mylist[[2]]$var4[50], na.rm=T)
我可以看到我是如何用一個循環做到這一點...
...或者通過創建每個變量的數據幀,
var1df <- cbind(df1$var1, df2$var1)
var2df <- cbind(df1$var2, df2$var2) # and if there are up to var1000?...
...
dfnew$var1 <- rowMeans(var1df)
dfnew$var2 <- rowMeans(var2df)
...
但是這以上的複製比我」 d喜歡,似乎比慣用的R更少;所以我正在嘗試使用其中一個應用函數來完成它。
由於這是一個列表,lapply似乎是正確的,只是它似乎跨越了錯誤的邊界---也就是說,它是在列表中的含義,而不是列表中的均值。
對於其他保證金,交叉列表而非列表中沒有設置lapply。
並定期申請,這讓我設置一個保證金是令人不安的,這是一個列表,而不是一個矩陣或數據框。
> apply(mylist, MARGIN = 2, FUN=mean)
Error in apply(mylist, MARGIN = 2, FUN = mean) :
dim(X) must have a positive length
(我的實際列表有很多超過2個數據幀,所以很多容易糊塗或合併-Y方案得到那種毛茸茸的很快---或者至少,我有太多笨拙循環結束getattribute的東西,知道如何做到乾淨的長度爲N.)
有什麼我失蹤的其中一個rapply,tapply,eapply,*應用函數,可以解決這個問題,或一般的東西我很愚蠢?
UPDATE
感謝大家的幫助的答案。當我測試Amelia庫進行多重歸責時,我遇到了這個問題,並想看看模擬時刻的傳播是來自長期手段。 (它們返回的對象是這樣形狀的,並且具有上述對應於原始數據框的屬性,並且沒有丟失數據。)
Here's a gist我把它湊在一起擺弄它。
我喜歡user20650的回答並不需要額外的複製(在要點imputer2),所以當我開始擴展到1000列表時,它變得比要求合併新數據幀的速度快得多。
什麼是古怪的,我還沒有完全解決的是,我運行imputer1與imputer2運行的值看起來相同,但其中a == b是錯誤的。我假設一個舍入問題。
我也還在尋找一種方式,在這個結構應用等表示或SD基本功能(不復制),而不是itemwise計算它們,但無論如何,我的問題解決了,我把它留給另一個問題。
你應該從一個小例子開始,手工完成。我不認爲你的尺寸正確。 –
你能解釋一下你的意思嗎? – Mittenchops
我打算輸出的尺寸與每個列表的尺寸相同。我想你可能誤解了這個問題。 – Mittenchops