2013-08-01 34 views
1

有關列表語法的另一個問題(我正在慢慢學習,我認爲)。我在以下簡化形式數據:將hist應用於包含NA的數據框列表

a=c(1,2,3,4,5,NA,NA) 
b=c(6,7,8,9,10,NA,NA) 
c=c(6,5,3,NA,NA,NA,NA) 
d=c(NA,NA,NA,NA,NA,NA,NA) 
A=data.frame(a,b,c,d) 
B=data.frame(c,b,a,d) 
C=data.frame(d,c,b,a) 
mylist=list(A,B,C) 
bins=c(0,2,4,6,8,10) 

我想根據定義的二進制位在dataframes列表倉的每個列,然後返回一個平均數各bin爲每個數據幀。我不介意輸出是什麼形式,數據幀或向量列表。因此,在這個例子:

hist(a,bins, plot= FALSE) 
hist(b,bins, plot= FALSE) 
hist(c,bins, plot= FALSE) 

給出

$counts 
[1] 2 2 1 0 0 
$counts 
[1] 0 0 1 2 2 
$counts 
[1] 0 1 2 0 0 

分別計數。

我不知道該怎麼做,但考慮到d只包含NA的我想它返回:

$counts 
[1] 0 0 0 0 0 

(我想將每個NA爲0)。

因此A的平均值(其中包含A,B,C,d)將是:

$counts 
[1] 2 2 1 0 0 + 
$counts 
[1] 0 0 1 2 2 + 
$counts 
[1] 0 1 2 0 0 + 
$counts 
[1] 0 0 0 0 0 + 

= 2 3 4 2 2/4 

= 0.5 0.75 1 0.5 0.5 

這將是我的數據幀A.期望的輸出向量的最終列表還將包括有關矢量對於B和C,儘管正如我所說,初始列表中每個數據幀的列的數據框也沒有問題,因爲最後一步是我將這些平均值計算在箱的中點上。

我希望我的解釋足以說明我正在嘗試做什麼。

+0

製作'd'數字:'d < - as.numeric(d) '它應該工作。 – Thomas

+0

嗨托馬斯,謝謝你。在更簡單的情況下,我想忽略包含所有NA(如d)的數據框列表中的列,我該如何處理數據並獲取平均值? – user1912925

回答

2

正如我在我的評論中指出的那樣,製作d數字將解決您排除故障的簡單情況。爲了得到你想要在整個數據框計算,使用apply,然後採取一些rowMeans的手段:

rowMeans(apply(A,2,function(a) hist(a,bins,plot=FALSE)$counts)) 
#[1] 0.50 0.75 1.00 0.50 0.50 

要爲dataframes名單做,只是其嵌套在一個lapply(或sapply):

> lapply(mylist,function(X) 
     rowMeans(apply(X,2,function(a) hist(a,bins,plot=FALSE)$counts))) 
[[1]] 
[1] 0.50 0.75 1.00 0.50 0.50 

[[2]] 
[1] 0.50 0.75 1.00 0.50 0.50 

[[3]] 
[1] 0.50 0.75 1.00 0.50 0.50 

(注:顯然你的DFS都產生相同的輸出,所以這看起來像是無法正常工作,但它實際上是。)

+0

+1不錯的工作,這看起來像OP想要什麼 –

+0

嗨,托馬斯,謝謝你的答案,但我怎麼能應用這個mylist(包含數據框B和C以及A​​的列表)? – user1912925

+0

@ user1912925查看編輯 – Thomas

相關問題