0

我是 R 的新手。我有两个如下所示的 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

我想在for ex之间应用一个prop.test:DF2的第一行和DF1的每一行,然后是DF2的第二行和DF1的每一行,然后是DF2的第三行和DF1的每一行以此类推,直到 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))
}

但它不起作用。显然,由于我是初学者,有些错误我无法解决。另一个问题是我执行的每个测试都将保存在单独的变量中和/或打印在单独的文件中。

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 回答