4

2つのデータフレームがあり、行に対して独立した2グループのt検定を実行したいと思います(つまりt.test(y1, y2)y1はdataframe1の行で、はdataframe2のy2行と一致しています)。

これを達成するための最良の方法は何ですか?

編集:私はちょうどフォーマットを見つけました:dataframe1 [i、] dataframe2 [i、]。これはループで機能します。それが最善の解決策ですか?

4

2 に答える 2

5

概説したアプローチは合理的です。ストレージベクトルを事前に割り当てるようにしてください。列ではなく行を本当に比較したいかどうかを再確認します。私が使用するほとんどのデータセットには、観測の単位として各行があり、列は対象の個別の応答/列を表します。それはデータです。したがって、それが必要な場合は、次のアプローチを使用します。

#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,])
}

これで、に行がある限りのリストができましたdf1lapply次に、とを使用しsapplyてリストオブジェクトから簡単に抽出することをお勧めします。

于 2012-09-21T00:48:35.050 に答える
3

データを列として保存する方が理にかなっています。

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の単純なラッパーであるを使用することもできます(したがって、キーストロークを節約できます!)mapplySIMPLIFY = F

t.test_results <- Map(t.test, x = df1_t, y = df2_t)
于 2012-09-21T00:52:40.477 に答える