将cohen.d应用于多列

时间:2019-05-02 05:38:35

标签: r function apply

我有一个调查问题答案的数据框。我想使用cohen.d中的effsize来估算每个响应的Cohen d效应大小。

这是我数据框的前6行:

`structure(list(id = c("HO1001", "HO1001", "HO1002", "HO1002", 
"HO1003", "HO1003"), time = structure(c(1L, 2L, 1L, 2L, 1L, 2L
), .Label = c("0", "1"), class = "factor"), grit.distract = c(1, 
1, 3, 2, 1, 2), grit.setback = c(5, 4, 3, 3, 4, 4), grit.obsess = c(3, 
2, 2, 2, 3, 2), grit.work = c(4, 5, 3, 4, 5, 5), grit.goal = c(2, 
3, 2, 1, 4, 4), grit.focus = c(3, 3, 3, 1, 2, 3), grit.finish = c(4, 
4, 4, 4, 4, 3), grit.diligent = c(4, 4, 3, 4, 5, 4), grit.mean = c(3.25, 
3.25, 2.875, 2.625, 3.5, 3.375)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -6L))`

我成功地将df转换为宽格式,以在摘要统计信息上使用effsize,即平均值/总计,如下所示:

`structure(list(id = c("HO1001", "HO1002", "HO1003", "HO1004", 
"HO1005", "HO1006"), pre = c(3.25, 2.875, 3.5, 2.25, NA, NA), 
    post = c(3.25, 2.625, 3.375, 2.5, 2.75, 2.875), change = c(0, 
    -0.25, -0.125, 0.25, NA, NA), highconf = structure(c(2L, 
    1L, 2L, 1L, NA, NA), .Label = c("0", "1"), class = "factor")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -6L)`

`cohen.d(grit.tot$pre, grit.tot$post, na.rm = T)`

我想做的是计算每个调查项目的效果大小,即在时间0和时间1之间的沙砾分散,沙砾挫折等(请不要对我的统计方法发表评论)。鉴于我有更多这样的数据帧,并且不想单独处理它们,我相信我应该使用function和诸如apply这样的循环,但是我不确定如何来构造它。

1 个答案:

答案 0 :(得分:1)

如果我了解您的问题,这可能会有所帮助。 如果您将问题第一部分中的数据框存储为dt,请运行以下命令,以给出每个调查项目的数值。

lapply(dt[c(-1,-2)],function(x) cohen.d(x ~ dt$time))

dt[c(-1,-2)]删除了ID列和time列,因为您不想对它们进行cohen d测试。