2011-12-15 9 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 

私が何をしたいのかは、それぞれの平均値を計算することです2つの極値を取り除いた後に私はplyrを使用し、全行については :

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

分とNASに置き換え、最大値を持ついくつかの一時的なデータフレーム/マトリックスを作成することもOKにする必要がありますが、初心者として、私はそれを行うことができないのです。あなたの助けのための

どうもありがとう

EDIT 1

私はトリムオプションを持っている意味することを明らかに知りませんでした。私は代わりにの代わりにを意味する解決策を持っていたいと思います。すなわち:

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

私は、これは質問の投稿ルールを破った場合に謝罪が、その後中央値など、平均値用に別の質問を有する反直観的です。

EDIT 2 plyrなしの部分的な解決策:

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

これは、列の値との間の接続を破ります。

+2

あなたが最小値/最大値の複数の出現箇所を持っている場合、あなたはまた、それらを削除したいですか? – themel

+0

行の平均を計算する場合は、おそらく行列を使用するか、データフレームを転置する必要があります。 –

+0

@themel:良い点。元のデータは、複数のゼロを含む可能性が高い行からすでにフィルタリングされていますが、ca 10k行と30列で発生する可能性があります。私は行からちょうど1つの最大値と1つの最大値を取り除くことにとどまります。 – darked89

答えて

5

あなたはmeantrim引数を使用することができます。

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

私は悪いです:あなたは答えたように答えましたが、もっと一般的な解決法が必要です。私はトリムを持たないe1071の歪度のような別の機能をプラグインできます。 – darked89

+1

@ darked89:あなたの質問をより一般的なものに編集しても、より一般的な解決策で回答を編集します。 –

関連する問題