我无法根据我的特殊问题调整已经给出的答案:
我有一个数据集:
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?
答案 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])))