假设我有以下数据:
df <- structure(list(treat = structure(1:4, levels = c("Control", "Treatment 1",
"Treatment 2", "Treatment 3"), class = "factor"),
female_n = c(314709L, 10456L, 10481L, 10455L), female_mean = c(0.506,
0.506, 0.504, 0.5), female_sd = c(0.5, 0.5, 0.5, 0.5), birth_year_n = c(314709L,
10456L, 10481L, 10455L), birth_year_mean = c(1973.74, 1973.654,
1973.486, 1973.766), birth_year_sd = c(16.867, 16.997, 16.869,
16.89), provided_phone_no_n = c(314709L, 10456L, 10481L,
10455L), provided_phone_no_mean = c(0.656, 0.666, 0.663,
0.647), provided_phone_no_sd = c(0.475, 0.472, 0.473, 0.478
), dem_n = c(314709L, 10456L, 10481L, 10455L), dem_mean = c(0.48,
0.474, 0.482, 0.478), dem_sd = c(0.5, 0.499, 0.5, 0.5), rep_n = c(314709L,
10456L, 10481L, 10455L), rep_mean = c(0.136, 0.141, 0.142,
0.138), rep_sd = c(0.343, 0.348, 0.349, 0.345), uaf_n = c(314709L,
10456L, 10481L, 10455L), uaf_mean = c(0.363, 0.365, 0.357,
0.363), uaf_sd = c(0.481, 0.481, 0.479, 0.481)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -4L))
我想添加一个新的
*_se
列,该列将现有的
*_n
和
*_sd
我的数据中每个变量组的列。即每个一个
female_*
,
birth_year_*
,
provided_phone_no_*
,
dem_*
,
rep_*
和
uaf_*
.
我想,试图做到这一点
mutate(across())
可能是正确的helper函数,但我在substring中遇到了一些问题
{.col}
并让R将其识别为列名。这是我迄今为止的尝试:
df %>%
mutate(
across(ends_with("_sd"),
list(
se = ~.x / sqrt(!!ensym("{str_replace(.col, '_sd', '_n')}"))
)
)
以上返回错误:
Error in `ensym()`:
! `arg` must be a symbol
Backtrace:
1. ... %>% ...
10. rlang::abort(message = message)
有人能看到我哪里错了吗?