运行Power.t.test获取数据框

时间:2015-10-27 16:26:07

标签: r sample

我正在尝试在数据框上运行power.t.test并尝试为每位员工返回samplesize(n),但它给了我这个错误。

  

power.t.test出错(delta = d.f $ Delta,sd = d.f $ sd,sig.level = 0.05,:     'n','delta','sd','power'和'sig.level'中的一个必须为NULL

这是我到目前为止所做的。

dput(d.f)
structure(list(power = c(0.95, 0.95, 0.95, 0.95), sig.level = c(0.05, 
0.05, 0.05, 0.05), sd = c(4.93255160738102, 20.3907509926899, 
23.1325373816684, 6.0463892968789), delta = c(97, 97, 90, 96), 
    workedby = structure(1:4, .Label = c("emp1", "emp2", "emp3", 
    "emp4"), class = "factor"), newcolumn = c(0, 0, 0, 0)), .Names = c("power", 
"sig.level", "sd", "delta", "workedby", "newcolumn"), row.names = c(NA, 
-4L), class = "data.frame")

第一种方法

 d.f$newcolumn <- 0

for (i in 1:nrow(d.f)) {
  n <- power.t.test(delta = d.f$delta, sd = d.f$sd, sig.level=.05, power = .8, type = "one.sample")
  d.f$newcolumn[i] <- n
}
head(d.f)

第二种方法:

apply(d.f[,c('power','sig.level','sd','delta')], 1, function(x) power.t.test(x) )

有人可以告诉我我做错了什么。基本上,我希望为每位员工返回SampleSize。

1 个答案:

答案 0 :(得分:1)

它需要一个值作为输入,而不是数据帧。以下作品:

power.t.test(delta=d.f$delta[1], sig.level=d.f$sig.level[1], power=d.f$power[1], sd=d.f$sd[1])

您需要将其包装在循环中并重新分配到“新列”中的正确行。

相关问题