0

私は R の初心者です。次のような 2 つの data.frame があります。

DF1

 List_name     Smokers   Not_smokers    
  List1          30         100
  List2          10          50
  List3          3           10
  List4          12          85
  List5          56          60
  List6          90         120

DF2

 List_name      Male       Female    
  List1          23          123
  List2          45          654
  List3          35          110
  List4          145         850
  List5          89          234
  List6          56          765

たとえば、DF2 の最初の行と DF1 の各単一行、次に DF2 の 2 行目と DF1 の各単一行、次に DF2 の 3 行目と DF1 の各単一行の間に prop.test を適用したいと思います。というように、DF2 のすべての行の終わりまで続きます。したがって、DF1 のディメンションは 100(行)X2(列) であり、DF2 のディメンションは 30(行)X2(列) であるため、最終的に 30X100 のテストがあるため、3000 のテストになります。

私が試したのは次のとおりです(別の投稿された質問の関数を使用):

for (i in 1:length(DF2)){ 
   test <- apply(DF1, 1, function(x) prop.test(rbind(x, as.numeric(DF2[[i]]), correct=TRUE,  alternative="two.sided", conf.level=.99))
}

しかし、うまくいきません。もちろん、初心者のため解けないエラーもあります。もう 1 つの問題は、実行する各テストが別の変数に保存されたり、別のファイルに出力されたりすることです。

4

2 に答える 2

1

初心者にとって最も簡単な方法は、2 つのループを使用することです。

DF1 <- read.table(text='List_name Smokers Not_smokers 
 List1 30 100
 List2 10 50
 List3 3 10
 List4 12 85
 List5 56 60
 List6 90 120',header=T)

DF2 <- read.table(text='List_name Male Female 
 List1 23 123
 List2 45 654
 List3 35 110
 List4 145 850
 List5 89 234
 List6 56 765', header=T)

test <- NULL
for (i in 1:nrow(DF2)) { 
 for (j in 1:nrow(DF1)) {
  test <- c(test,prop.test(c(DF1[j,2], DF2[i,2]),c(DF1[j,3]+DF1[j,2], DF2[i,3]+DF2[i,2]), correct=TRUE,  alternative="two.sided", conf.level=.99))
 }
}

私が行ったテストはあなたの質問とは静かですが、あなたが必要としているものだと思います(喫煙者/非喫煙者の割合が男性/女性と同じかどうかをテストしています)

編集:

結果をリストに保存するには:

test <- list()
for (i in 1:nrow(DF2)) { 
 for (j in 1:nrow(DF1)) {
  test[[length(test)+1]] <- prop.test(c(DF1[j,2], DF2[i,2]),c(DF1[j,3]+DF1[j,2], DF2[i,3]+DF2[i,2]), correct=TRUE,  alternative="two.sided", conf.level=.99)
 }
}
于 2013-01-31T10:49:25.123 に答える
0

DF1 および DF2 オブジェクトが data.frame. DF2 をリストとして使用するため...

DF1 <- data.frame(Smokers=c(30, 10, 3, 12, 56, 90), Not_smokers=c(100, 50, 10, 85, 60, 120))
DF2 <- data.frame(M=c(23, 45, 35, 145, 89, 56), F=c(123, 654, 110, 850, 234, 765))

test <- vector("list", dim(DF1)[1]*dim(DF2)[1])
k=1
for (i in 1:dim(DF2)[1]){
for(j in 1:dim(DF1)[1]){
    test[[k]] <- prop.test(rbind(as.numeric(DF1[j,]), as.numeric(DF2[i,])), correct=TRUE, alternative="two.sided", conf.level=.99)
    k=k+1
}
}

# the chi-square test produce warnings   
warnings()
于 2013-01-31T11:12:01.863 に答える