大きなデータ フレームのサブセットの各列について、グループごとに平均と標準偏差を計算したいと考えています。
同様の質問に対する回答の一部がうまくいかない理由を理解しようとしています。私はまだ R にかなり慣れていないので、微妙な点がたくさんあると確信しています (そしてそれほど微妙ではないこともあります!) 私は完全に欠けています。
次のような大きなデータ フレームがあります。
mydata <- data.frame(Experiment = rep(c("E1", "E2", "E3", "E4"), each = 9),
Treatment = c(rep(c("A", "B", "C"), each = 3), rep(c("A", "C", "D"), each = 3), rep(c("A", "D", "E"), each = 3), rep(c("A", "B", "D"), each = 3)),
Day1 = sample(1:100, 36),
Day2 = sample(1:100, 36),
Day3 = sample(1:150, 36),
Day4 = sample(50:150, 36))
たとえば、実験と治療によってデータをサブセット化する必要があります。
testB <- mydata[(mydata[, "Experiment"] %in% c("E1", "E4"))
& mydata[, "Treatment"] %in% c("A", "B"),
c("Treatment", "Day1", "Day2", "Day4")]
次に、testB の各列について、各治療グループの平均と標準偏差を計算します。
私はまず、tapply を使用しようとしましたが (最初は 1 つの列だけで)、testB にあってはならない処理グループに対して "NA" が返されました。これは、この小さなデータセットでは大きな問題ではありませんが、かなり厄介です。私の実際のデータで:
>tapply(testB$Day1, testB$Treatment, mean)
A B C D E
70.66667 61.00000 NA NA NA
data.frame の複数の変数に対して、グループごとに平均と標準偏差を計算するからのソリューションを実装してみました。集計を使用するとうまくいきました:
ag <- aggregate(. ~ Treatment, testB, function(x) c(mean = mean(x), sd = sd(x)))
しかし、data.table ソリューションを機能させることができません。
library(data.table)
testB[, sapply(.SD, function(x) list(mean=mean(x), sd=sd(x))), by = Treatment]
testB[, c(mean = lapply(.SD, mean), sd = lapply(.SD, sd)), by = Treatment]
どちらもエラーメッセージを表示しました
Error in `[.data.frame`(testB, , c(mean = lapply(.SD, mean), sd = lapply(.SD, :
unused argument(s) (by = Treatment)
私は何を間違っていますか?
無知な初心者を助けてくれてありがとう!