1

次のようなデータフレームがあります。

set.seed(123)
df <- data.frame(factor1 = rep(c("A", "B"),50),
                 factor2 = rep(c("X","X", "Y", "Y"),25),
                 value = rnorm(100))

factor1:factor2 ペアの要約値を計算したいと思います。以下を使用して平均と標準偏差を計算しました。

summary <- as.matrix(cast(df, factor1~factor2, mean))
summary.sd <- as.matrix(cast(df, factor1~factor2, sd))
summary.table <- t(rbind(summary, summary.sd))
colnames(summary.table) <- c("A.mean", "B.mean", "A.sd", "B.sd")

しかし、A と B を比較する t.test の p 値を summary.table に追加したいと思います。それと一緒に出力する factor2 変数の:

for (measurement in levels(df$factor2)) print(t.test(value~factor1, data=subset(df, factor2==measurement)))

これを行うには簡単な方法が必要だと思います。または、私が知らないパッケージを使用すると、これがはるかに簡単になる可能性があります。

4

1 に答える 1

3

私はこのようにします:

まず、使用してから使用して要約を取得meanしますsdddplyplyrsummarise

require(plyr)
require(reshape2)
o1 <- ddply(df, .(factor1, factor2), summarise, mean = mean(value), sd=sd(value))

#   factor1 factor2       mean        sd
# 1       A       X 0.03746854 0.8730525
# 2       A       Y 0.18352432 0.7635439
# 3       B       X 0.10317706 1.0494930
# 4       B       Y 0.03745372 0.9876173

次に、とのレベルの両方に NULL を使用して取得p-valuesします。t-testmean(A) = mean(B)XYfactor2

o2 <- ddply(df, .(factor2), summarise, pval=t.test(value ~ factor1)$p.value)

#   factor2      pval
# 1       X 0.8108754
# 2       Y 0.5614256

次に、 を使用して、目的reshape2の形式meltdcastキャストo1します。

o1.mc <- dcast(melt(o1, c("factor1", "factor2")), factor2 ~ variable + factor1)

#   factor2     mean_A     mean_B      sd_A      sd_B
# 1       X 0.03746854 0.10317706 0.8730525 1.0494930
# 2       Y 0.18352432 0.03745372 0.7635439 0.9876173

今、それをマージしますo2

merge(o1.mc, o2)

#   factor2     mean_A     mean_B      sd_A      sd_B      pval
# 1       X 0.03746854 0.10317706 0.8730525 1.0494930 0.8108754
# 2       Y 0.18352432 0.03745372 0.7635439 0.9876173 0.5614256
于 2013-02-10T15:21:53.510 に答える