web-dev-qa-db-ja.com

レベルごとの平均

これは簡単かもしれませんが、ウェブ上で答えが見つかりません。レベルごとの要因による平均計算に問題があります。私のデータは典型的に見えます:

factor, value
a,1
a,2
b,1
b,1
b,1
c,1

ベクトルAにレベル "a"の平均のみが含まれるようにします。コンソールでAを入力した場合、1.5を取得します。平均を計算するこの方法では、係数を使用する必要があります。

よろしくお願いします。

13
Bartek Taciak

data.table解決策@lukeAが提案したことをおそらく行うべきですが

library(data.table) 
A <- setDT(df[df$factor == "a", ])[, mean(value)]
## [1] 1.5
3
David Arenburg

tapplyを見てください。これにより、因子に従ってベクトルを分割し、各サブセットに関数を適用できます

> dat<-data.frame(factor=sample(c("a","b","c"), 10, T), value=rnorm(10))
> r1<-with(dat, tapply(value, factor, mean))
> r1
         a          b          c
 0.3877001 -0.4079463 -1.0837449
> r1[["a"]]
[1] 0.3877001

r1[["a"]]などを使用して結果にアクセスできます。

あるいは、人気のあるRパッケージ(plyr)の1つに、これを行う非常に良い方法があります。

> library(plyr)
> r2<-ddply(dat, .(factor), summarize, mean=mean(value))
> r2
  factor       mean
1      a  0.3877001
2      b -0.4079463
3      c -1.0837449
> subset(r2,factor=="a",select="mean")
       mean
1 0.3877001

代わりにdlplyを使用することもできます(データフレームを受け取り、代わりにリストを返します)

> dlply(dat, .(factor), summarize, mean=mean(value))$a
       mean
1 0.3877001
28
JPC

次のコードは、factor = aの場合に値の平均を求めます。

mean(data$value[data$factor == "a"])
4
Lenatis

別の単純な可能性は、「by」関数です。

by(value, factor, mean)

因子レベル「a」の平均は、次の方法で取得できます。

factor_means <- by(value, factor, mean)
factor_means[attr(factor_means, "dimnames")$factor=="a"]
4
Ruediger Ziege