2013-08-02 62 views
1

嗨我有什麼可能是一個非常簡單的問題,但我不明白。我正在使用ddply創建要在ggplot2中使用的數據框。ddply生成數據幀不分級

這裏被截斷我的數據:

Subject Group Day gkg Strain 
PE4 E 1 0.829556075 P 
PE5 E 1 0.871823204 P 
PE6 E 1 1.135461255 P 
PS4 S 1 3.316062176 P 
PS5 S 1 2.61627907 P 
PS6 S 1 3.286004057 P 
WE4 E 1 0.154101563 W 
WE6 E 1 1.317852495 W 
WS4 S 1 2.007434944 W 
WS5 S 1 1.28  W 
PE4 E 2 0.642209302 P 
PE5 E 2 0.502644788 P 
PE6 E 2 1.319834559 P 
PS4 S 2 3.350515464 P 
PS5 S 2 2.994241843 P 
PS6 S 2 3.507014028 P 
WE4 E 2 0.109366337 W 
WE5 E 2 0.493125 W 
WE6 E 2 0.721960784 W 
WS4 S 2 2.542056075 W 
WS5 S 2 1.23752495 W 

我創造了這個數據的一個子集,基於E或S

Edata = which(data$Group == "E") 
e = data[Edata,] 
Sdata = which(data$Group == "S") 
s= data[Sdata,] 

組然後我試圖使用ddply創建包括一個數據幀平均值,標準偏差,平均值的標準誤差

newdataIntakeEGKG = ddply(e, .(e$Strain, e$Day), summarise, 
    N = sum(!is.na(e$gkg)), 
    mean = mean(e$gkg, na.rm = TRUE), 
    sd = sd(e$gkg, na.rm = TRUE), 
    se = sd(e$gkg, na.rm = TRUE)/sqrt(sum(!is.na(e$gkg)))) 

這將生成以下輸出:

e$Strain e$Day N  mean  sd   se 
1   P  1 60 0.630856 0.3593886 0.04639687 
2   P  2 60 0.630856 0.3593886 0.04639687 
3   P  3 60 0.630856 0.3593886 0.04639687 
4   P  4 60 0.630856 0.3593886 0.04639687 
5  W  1 60 0.630856 0.3593886 0.04639687 
6  W  2 60 0.630856 0.3593886 0.04639687 
7  W  3 60 0.630856 0.3593886 0.04639687 
8  W  4 60 0.630856 0.3593886 0.04639687 

當我手工計算時,我學會了將兩個菌株的平均值結合起來。我哪裏做錯了?

回答

1

你不希望你所有的ddply調用e$。看看這是否有效。

ddply(e, .(Strain, Day), summarise, 
     N=sum(!is.na(gkg)), 
     mean=mean(gkg, na.rm=TRUE), 
     sd=sd(gkg, na.rm=TRUE), 
     se=sd(gkg, na.rm=TRUE)/sqrt(sum(!is.na(gkg)))) 

稍微清潔的替代,儘管它不一定獲得相同的結果:

ddply(na.omit(e), .(Strain, Day), summarise, 
     N=length(gkg), mean=mean(gkg), sd=sd(gkg), se=sd(gkg)/length(gkg)) 
+0

感謝這麼多的工作!我不需要'e $',因爲我用'(e,..)'指定數據集? – Stella

+0

是的,沒錯。事實上,通過指定'e $',你會混淆ddply:它將根據整個數據幀「e」計算均值和SD,而不是由分組變量定義的子集。 –