【发布时间】:2021-02-20 17:11:36
【问题描述】:
我有一个包含一致命名列的数据集,我想按组取列的平均值,例如,
library(dplyr)
library(purrr)
library(glue)
df <- tibble(`1_x_blind` = 1:3,
`1_y_blind` = 7:9,
`2_x_blind` = 4:6,
`2_y_blind` = 5:7)
df %>%
mutate(`1_overall_test` = rowMeans(select(., matches(glue("^1_.*_blind$")))))
#> # A tibble: 3 x 5
#> `1_x_blind` `1_y_blind` `2_x_blind` `2_y_blind` `1_overall_test`
#> <int> <int> <int> <int> <dbl>
#> 1 1 7 4 5 4
#> 2 2 8 5 6 5
#> 3 3 9 6 7 6
这个方法很好用。对我来说,下一步是对其进行缩放,以便我可以完成整个系列的列,例如
df %>%
mutate(overall_blind = map(1:2, ~rowMeans(select(., matches(glue("^{.x}_.*_blind$"))))))
#> Error: Problem with `mutate()` input `overall_blind`.
#> x no applicable method for 'select' applied to an object of class "c('integer', 'numeric')"
#> ℹ Input `overall_blind` is `map(1:2, ~rowMeans(select(., matches(glue("^{.x}_.*_blind$")))))`.
我认为这里的问题是 select 混淆了 . 运算符。是否可以通过这种方式在一系列列名上map?理想情况下,我希望列名遵循上面示例中的{.x}_overall 模式。
【问题讨论】:
-
您是否希望您的输出只有 1 个额外的
overall_blind列表列来存储所有子组的行均值,或者您希望有很多列,例如1_overall_test、2_overall_test等。 ? -
多列会更好
-
每组的列数是固定的(总是2,即1_x,1_y),还是每组不同?
-
数字永远是固定的