我有一些带有一些结果的csv。我想遍历结果,运行power.prop.test并输出新列中每行的结果。到目前为止,我已经得到了这个:
data <- read.csv("Downloads/data.csv", sep = ",", header = TRUE)
for (i in 1:nrow(data)) {
n <- power.prop.test( p1 = data[i,5], p2 = data[i,6], sig.level=.1, power = .8, alternative = "one.sided")
data <- cbind(data, n[1])
}
head(data)
我没有用输出填充一列,而是循环并为power.prop.test创建一个新列。我正在运行。我为每个输出绑定一个新列,而不是为每个输出填充一列。问题是我不确定如何实现后者。
如果有人对如何将这些输出合并到一个非常棒的列中有任何建议。
谢谢!
答案 0 :(得分:5)
试试这个:
data <- read.csv("Downloads/data.csv", sep = ",", header = TRUE)
data$newcolumn <- 0
for (i in 1:nrow(data)) {
n <- power.prop.test( p1 = data[i,5], p2 = data[i,6], sig.level=.1, power = .8, alternative = "one.sided")
data$newcolumn[i] <- n
}
head(data)
我刚刚添加了一个新列,用零填充它,然后在计算它们时一次添加一个power.prop.test值。
答案 1 :(得分:1)
感谢您的帮助!这是我现在使用的解决方案:
# Read in csv of results
data <- read.csv("Downloads/data.csv")
data$obs=0
data$obs2=0
data$sig=0
# Create a loop to calculate required observations for each test based on CR, Significance and Statistical Power
for (i in 1:nrow(data)) {
# Error handling: where CR are the same, cannot calculate n and fails, we skip these tests
possibleError <- tryCatch(
n <- power.prop.test( p1 = data[i,5], p2 = data[i,6], sig.level=.2, power = .8, alternative = "one.sided")
,error=function(e)e
)
if(!inherits(possibleError, "error")){
# Real work: calculate n, determine if bigger than actual observations, if not assign sig = 0, otherwise =1
n <- power.prop.test( p1 = data[i,5], p2 = data[i,6], sig.level=.2, power = .8, alternative = "one.sided")
data[i,'obs'] = n[[1]]
data$obs2[i] = data$obs[i] * 2
if(data$obs[i]*2 < data$Traffic[i]) {
data$sig[i] <- 1
} else {
data$sig[i] <-0
}
}
}
# End for loop
write.csv(data,file = "dataClean.csv")
这会在每一行上运行power.prop.test,包括错误处理和告诉您是否有足够观察的条件。我确定有更有效的方式来撰写此文章,因此我会审核您的评论,看看我是否可以合并它们。
答案 2 :(得分:0)
首先,我应该说我从未听说过动力支柱测试。但话说回来,你的问题真的不是统计数据,对吗?
其次,有一个软件包可以向data.frame添加列,即dplyr
。
引用文档:
mutate(mtcars, displ_l = disp / 61.0237)
- “添加一个列displ_l(到mtcars),其中包含disp列中的值除以61.0237。”
答案 3 :(得分:0)
看起来像apply
的工作。为避免可能干扰因子或字符变量,我只是提交两列作为参数。
data$power.col <- apply(data[5:6], 1,
function(x) power.prop.test, p1 = x[1], p2 = x[2],
sig.level=.1, power = .8, alternative = "one.sided")
}