如何在大型数据集上逐行执行prop.test(比较两组)

时间:2014-08-12 07:30:11

标签: r

我无法根据我的特殊问题调整已经给出的答案:

我有一个数据集:

data.csv:

  

col1 col2 col3 col4

     

8600 64 1e + 06 1e + 06

     

9000 8999 1e + 06 1e + 06

     

...... ...... ......

我导入数据并运行prop.test以检查col1和col2中值之间的显着差异(n1和n2是样本大小的总数)。

data <- read.csv("data.csv", sep="\t", header=TRUE, dec = ",") 
x1 <- data$col1
x2 <- data$col2
n1 <- data$col3
n2 <- data$col4

pval <- prop.test(c(x1,x2),c(n1,n2))
pval$p.value

没有给我所有行的p.value:

summary(pval)

给出:

   Length Class  Mode     
statistic     1    -none- numeric  
parameter     1    -none- numeric  
p.value       1    -none- numeric  
estimate    200    -none- numeric  
null.value    0    -none- NULL     
conf.int      0    -none- NULL     
alternative   1    -none- character
method        1    -none- character
data.name     1    -none- character

如果我按行进行,它似乎适用于该行

pval2 <- prop.test(c(x1[1],x2[1]),c(n1[1],n2[1]))

pval2$p.value
summary(pval2)

给出:

Length Class  Mode     
statistic   1      -none- numeric  
parameter   1      -none- numeric  
p.value     1      -none- numeric  
estimate    2      -none- numeric  
null.value  0      -none- NULL     
conf.int    2      -none- numeric  
alternative 1      -none- character
method      1      -none- character
data.name   1      -none- character

显然我不想手动为所有100行做这件事。 任何建议怎么做prop.test行和获得p.value?

2 个答案:

答案 0 :(得分:1)

由于prop.test采用了​​各种形式的输入,而且我并不熟悉它,我无法确定你要使用哪一种,所以我不会评估你是否正确使用了数据。但是,我会告诉你两种方法来避免手动对每一行进行测试。

我使用并思考数据表,所以请原谅我这是否让您感到困惑。 我担心,下面的代码没有经过测试。我的R会话很忙。

require(data.table) 
##read the data into a data table.   
data <- data.table(read.csv("data.csv", sep="\t", header=TRUE, dec = ","))
## add an id, identifying each row.
data[,id:=seq(1:(.N))]
## do prop.test for each row.
data[,prop.test(c(col1,col2),c(col3,col4)),by="id"]

如果那不适合你,你可以尝试一下。

a <- c(1:nrow(data))
myrowprop <- function(i) {
    prop.test(c(x1[i],x2[i]),c(n1[i],n2[i]))
}
ListofResults <- lapply(a,myrowprop)

答案 1 :(得分:0)

通过修改您的成功尝试,以下内容应该有效:

ans <- lapply(seq_along(x1), function(i) prop.test(c(x1[i],x2[i]),c(n1[i],n2[i])))