2011-12-15 56 views
2

我得到了以下數據幀,DF(這裏顯示的片段):意味着排除最大值和最小值中的R

H2475 H2481 H2669 H2843 H2872 H2873 H2881 H2909 
E1 94.470 26.481 15.120 18.490 16.189 11.422 14.886 0.512 
E2 1.016 0.363 0.509 1.190 1.855 0.958 0.771 0.815 
E3 9.671 0.637 0.571 0.447 0.116 0.452 0.403 0.003 
E4 3.448 2.826 2.183 2.607 4.288 2.526 2.820 3.523 
E5 2.548 1.916 1.126 1.553 1.089 1.228 0.887 1.065 

我想要做的是計算每個的平均值刪除兩個極值後排。 對於全行我用plyr:

library(plyr) 
df.my_means <- adply(df, 1, transform, my_means = mean(as.matrix(df[i,]))) 

還應該確定以創建分鐘,將由NAS取代最大值一些臨時數據幀/矩陣,但作爲一個初學者,我沒有能夠做到這一點。

非常感謝您的幫助

編輯1

我顯然不知道意味着有微調選項。我想有一個解決方案,而不是意思是我可以插入任何其他功能。即:

library(plyr) 
library(e1071) 
df.my_means <- adply(df, 1, transform, my_skew = skewness(as.matrix(df[i,]), , 3)) 

我道歉,如果這打破了問題發帖規則,但後來具有均值,中位數等不同的問題是反直覺的。

編輯2 而不plyr偏溶液:

df.my_means <- apply(df ,1, function(x){y=x[order(x)]; (y[2:(length(y)-1)])}) 

這打破列值之間的連接。

+2

如果你有最小/最大的多次出現,你是否也想刪除它們? – themel 2011-12-15 13:40:02

+0

如果你想計算行的意思,那麼你可能應該使用矩陣或轉置你的數據框。 – 2011-12-15 13:45:40

回答

5

可以使用trim參數mean

apply(x,1,mean,trim=1/NCOL(x)) 
#   E1   E2   E3   E4   E5 
# 17.0980000 0.8765000 0.4376667 2.9583333 1.3295000