2011-12-15 102 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 
相关问题