【发布时间】:2021-04-13 20:46:04
【问题描述】:
我有一个包含 100 行和 13 列的数据框。数据框包含 11 个级别的观察结果(控制、组 1、组 2、...)
| treatment | variable1 | variable 2 |
|---|---|---|
| control | 1 | 3 |
| control | 2 | 4 |
| control | 0.5 | 2 |
| group1 | 1.2 | 1.2 |
| group1 | 3 | 6 |
- 我必须创建我的组的效果大小。为此,我需要将我的数据子集到变量 1 的各个处理中。接下来,我必须在公式中使用子集:
cohen.d(var1$group1, var1$control, na.rm = TRUE, hedges = T) %>% .$estimate
- 必须重复此步骤才能将 10 种不同的治疗方法与我的对照组进行比较。
- 必须对每一列(变量)重复这些步骤
- 我想将 cohen.d 公式的输出存储在 tibble 中
如何在不需要太多代码的情况下完成这些步骤?我试过这样...
hedge_calc <- function(y){
df <- data_single_response %>% select(c(y,), treatment)
x <- list()
for (i in 1:length(factor.list)){
x[i] <- df %>% filter(., remark == factor.list[i])
}
h <- list()
for (i in 1:length(factor.list)){
h[i] <- cohen.d(as.numeric(as.character(unlist(x[[i]]))), as.numeric(as.character(unlist(x[[1]])))
, na.rm = TRUE, hedges = T) %>% .$estimate
}
c <- list()
for (i in 1:length(factor.list)){
c[i] <- cohen.d(as.numeric(as.character(unlist(x[[i]]))), as.numeric(as.character(unlist(x[[1]])))
, na.rm = TRUE, hedges = T) %>% .$conf.int%>% .[1]
}
d <- list()
for (i in 1:length(factor.list)){
d[i] <- cohen.d(as.numeric(as.character(unlist(x[[i]]))), as.numeric(as.character(unlist(x[[1]])))
, na.rm = TRUE, hedges = T) %>% .$conf.int %>% .[2]
}
result <- data.frame(hedges_g = unlist(h), lower = unlist(c),
upper = unlist(d), treat_vs_control = factor.list[1:11])
print(result)
}
hedge_calc(3)
...并通过从第 2:13 列循环接收我的结果。 但是因为这阅读起来非常混乱且容易出错,所以我需要使用更好的代码。
你有什么想法吗?
非常感谢大家:)
【问题讨论】: