3

次のような 2 つの data.frames があります。

DF1      
  Col1     Col2     Col3    Col4    
 0.1854   0.1660   0.1997   0.4632
 0.1760   0.1336   0.1985   0.4496
 0.1737   0.1316   0.1943   0.4446    
 0.1660   0.1300   0.1896   0.4439


DF2       
  Col1     Col2     Col3    Col4    
 0.2456    0.2107   0.2688  0.5079
 0.2399    0.1952   0.2356  0.1143
 0.2375    0.1947   0.2187  0.0846    
 0.2368    0.1922   0.2087  0.1247

2 つの data.frames の間、特にペアの列の間で wilcox.test を実行したいので、次のようにします。

test1: between Col1 of DF1 and Col1 of DF2     
test2: between Col2 of DF1 and Col2 of DF2      

等々。

次のスクリプトを使用しました。

for (i in 1:length(DF2)){ 
    test <- apply(DF1, 2, function(x) wilcox.test(x, as.numeric(DF2[[i]]), correct=TRUE))
}

残念ながら、このスクリプトの出力は、次のスクリプトを使用して実行された同じテストの出力とは異なります。

test1 = wilcox.test(DF1[,1], DF2[,1],  correct=FALSE)     
test2 = wilcox.test(DF1[,2], DF2[,2],  correct=FALSE)       

実際の data.frames には、約 100 列と 200 行 (次元に関しては等しい) があるため、テスト列を列ごとに作成することはできません。

dput(DF1):

structure(list(Col1 = c(0.1854, 0.1760, 0.1737, 0.1660,....),  class = "data.frame", row.names = c(NA, -100L)))

同じDF2

4

2 に答える 2

6

これは古典的なmapplyケースです。基本的には の多変量バージョンですsapplymapply各データフレームを順番に調べていました。まず、いくつかのデータを作成します。

df1 = data.frame(c1 = runif(10), c2 = runif(10), c3 = runif(10), c4 = runif(10))
df2 = data.frame(c1 = runif(10), c2 = runif(10), c3 = runif(10), c4 = runif(10))

次に使用しますmapply

l = mapply(wilcox.test, df1, df2, SIMPLIFY=FALSE, correct=FALSE)

ここで、変数lはリストです。そう、

wilcox.test(df1[,1], df2[,1],  correct=FALSE) 
l[[1]]
wilcox.test(df1[,2], df2[,2],  correct=FALSE) 
l[[2]]
于 2013-03-11T14:48:20.637 に答える
1

forループではなく、列名をループする方が簡単かもしれません

for (name in colnames(DF2)){
    ...
    wilcox.test(DF1[,name], DF2[,name],  correct=FALSE))
    ...
}
于 2013-03-11T14:50:03.383 に答える