2つのデータフレームがあり、行に対して独立した2グループのt検定を実行したいと思います(つまりt.test(y1, y2)
、y1
はdataframe1の行で、はdataframe2のy2
行と一致しています)。
これを達成するための最良の方法は何ですか?
編集:私はちょうどフォーマットを見つけました:dataframe1 [i、] dataframe2 [i、]。これはループで機能します。それが最善の解決策ですか?
2つのデータフレームがあり、行に対して独立した2グループのt検定を実行したいと思います(つまりt.test(y1, y2)
、y1
はdataframe1の行で、はdataframe2のy2
行と一致しています)。
これを達成するための最良の方法は何ですか?
編集:私はちょうどフォーマットを見つけました:dataframe1 [i、] dataframe2 [i、]。これはループで機能します。それが最善の解決策ですか?
概説したアプローチは合理的です。ストレージベクトルを事前に割り当てるようにしてください。列ではなく行を本当に比較したいかどうかを再確認します。私が使用するほとんどのデータセットには、観測の単位として各行があり、列は対象の個別の応答/列を表します。それはデータです。したがって、それが必要な場合は、次のアプローチを使用します。
#Fake data
df1 <- data.frame(matrix(runif(100),10))
df2 <- data.frame(matrix(runif(100),10))
#Preallocate results
testresults <- vector("list", nrow(df1))
#For loop
for (j in seq(nrow(df1))){
testresults[[j]] <- t.test(df1[j,], df2[j,])
}
これで、に行がある限りのリストができましたdf1
。lapply
次に、とを使用しsapply
てリストオブジェクトから簡単に抽出することをお勧めします。
データを列として保存する方が理にかなっています。
data.frameを転置することができます
df1_t <- as.data.frame(t(df1))
df2_t <- as.data.frame(t(df2))
次に、を使用して2つの列を一度mapply
に循環させることができますdata.frames
t.test_results <- mapply(t.test, x= df1_t, y = df2_t, SIMPLIFY = F)
または、 with Map
の単純なラッパーであるを使用することもできます(したがって、キーストロークを節約できます!)mapply
SIMPLIFY = F
t.test_results <- Map(t.test, x = df1_t, y = df2_t)