2016-04-08 3 views
0

は、どのようにRでループの使用なしに行列の各列に対して範囲、平均値、標準偏差、中央値、最大値及び最小値を抽出するために自動化できますか?次のようにIはRワークスペースにデータフレームを有するFORループを使用せずにRの行列の各列に対して複数の演算を実行する方法は?

a b c d 
s 1 2 3 4 
t 2 4 5 6 
u 1 9 7 6 
v 9 2 3 4 
w 3 2 0 2 
x 3 2 0 9 
y 9 2 4 3 
z 8 3 4 5 

を想定しますかapply/sapply/lapplyを採用することは可能ですか?

答えて

0
apply(df, 2, summary) 
      a b c  d 
#Min. 1.00 2.00 0.00 2.000 
#1st Qu. 1.75 2.00 2.25 3.750 
#Median 3.00 2.00 3.50 4.500 
#Mean 4.50 3.25 3.25 4.875 
#3rd Qu. 8.25 3.25 4.25 6.000 
#Max. 9.00 9.00 7.00 9.000 
+2

または 'sapply(df、summary)'。範囲を取得するには、 'sapply(df、range)'を使います。 –

+0

ニース、私は 'サプリー'がそれをしたことを知らなかった:) – Sotos

+0

または単に要約(df)。要約はすべての列に適用されます。 – Dave2e

0
fun <- c('mean', 'sd', 'median', 'min', 'max') 
sapply(fun, function(x) apply(dff, 2, match.fun(x))) 

あなたはこのような出力を得るでしょう、

mean  sd median min max 
a 4.500 3.545621 3.0 1 9 
b 3.250 2.434866 2.0 2 9 
c 3.250 2.375470 3.5 0 7 
d 4.875 2.167124 4.5 2 9 
2

は、この場合のために、いくつかの異なるオプションがあります。他の人はapply関数について言及していますが、applyは行列上で動作し、与えられたデータフレームがあれば、関数を適用する前に行列に変換します。サンプルデータフレームではこれは問題にはなりませんが(最初に変換するのは非効率です)、数値以外の列を含むデータフレームで使用すると問題が発生する可能性があります。あなたは上記の機能を変更することにより、各列にしたい方の関数を計算することができます

> sapply(mtcars, function(x) c(mean(x), median(x), sd(x))) 
      mpg  cyl  disp  hp  drat  wt  qsec 
[1,] 20.090625 6.187500 230.7219 146.68750 3.5965625 3.2172500 17.848750 
[2,] 19.200000 6.000000 196.3000 123.00000 3.6950000 3.3250000 17.710000 
[3,] 6.026948 1.785922 123.9387 68.56287 0.5346787 0.9784574 1.786943 
      vs  am  gear carb 
[1,] 0.4375000 0.4062500 3.6875000 2.8125 
[2,] 0.0000000 0.0000000 4.0000000 2.0000 
[3,] 0.5040161 0.4989909 0.7378041 1.6152 

ベターは、リスト上で直接動作します(データフレームは、リストの形式である)sapplyを使用することです。

このようなことを行う機能を備えたdplyrパッケージを、より読みやすい形で簡単な方法でより複雑なケースに適応させることができます。

> library(dplyr) 
> mtcars %>% summarise_each(funs(mean,median,sd)) 
    mpg_mean cyl_mean disp_mean hp_mean drat_mean wt_mean qsec_mean vs_mean 
1 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375 
    am_mean gear_mean carb_mean mpg_median cyl_median disp_median hp_median 
1 0.40625 3.6875 2.8125  19.2   6  196.3  123 
    drat_median wt_median qsec_median vs_median am_median gear_median 
1  3.695  3.325  17.71   0   0   4 
    carb_median mpg_sd cyl_sd disp_sd hp_sd drat_sd  wt_sd 
1   2 6.026948 1.785922 123.9387 68.56287 0.5346787 0.9784574 
    qsec_sd  vs_sd  am_sd gear_sd carb_sd 
1 1.786943 0.5040161 0.4989909 0.7378041 1.6152 

> mtcars %>% summarise_each(funs(mean,median,sd)) %>% 
    matrix(nrow=ncol(mtcars), dimnames=list(names(mtcars), c('Mean','Median','SD'))) 
    Mean  Median SD  
mpg 20.09062 19.2 6.026948 
cyl 6.1875 6  1.785922 
disp 230.7219 196.3 123.9387 
hp 146.6875 123 68.56287 
drat 3.596563 3.695 0.5346787 
wt 3.21725 3.325 0.9784574 
qsec 17.84875 17.71 1.786943 
vs 0.4375 0  0.5040161 
am 0.40625 0  0.4989909 
gear 3.6875 4  0.7378041 
carb 2.8125 2  1.6152 
関連する問題