我得到了以下数据框,df,(这里显示的片段):
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,]) ) )
创建一些临时数据帧/矩阵也应该可以用最小值和最大值替换为NA,但作为初学者我无法做到。
非常感谢你的帮助
编辑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)])})
这会中断列值之间的连接。
答案 0 :(得分: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