gpt4 book ai didi

r - dplyr group by colnames 描述为字符串向量

转载 作者:行者123 更新时间:2023-12-03 23:11:04 26 4
gpt4 key购买 nike

我正在尝试对数据框中的多个列进行 group_by,但无法在 group_by 函数中写出每个列名,因此我想将列名称为向量,如下所示:

cols <- colnames(mtcars)[grep("[a-z]{3,}$", colnames(mtcars))]
mtcars %>% filter(disp < 160) %>% group_by(cols) %>% summarise(n = n())

这将返回错误:
Error in mutate_impl(.data, dots) : 
Column `mtcars[colnames(mtcars)[grep("[a-z]{3,}$", colnames(mtcars))]]` must be length 12 (the number of rows) or one, not 7

我绝对想使用 dplyr 函数来做到这一点,但无法弄清楚这一点。

最佳答案

您可以使用 group_by_at ,您可以在其中将列名称的字符向量作为组变量传递:

mtcars %>% 
filter(disp < 160) %>%
group_by_at(cols) %>%
summarise(n = n())
# A tibble: 12 x 8
# Groups: mpg, cyl, disp, drat, qsec, gear [?]
# mpg cyl disp drat qsec gear carb n
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
# 1 19.7 6 145.0 3.62 15.50 5 6 1
# 2 21.4 4 121.0 4.11 18.60 4 2 1
# 3 21.5 4 120.1 3.70 20.01 3 1 1
# 4 22.8 4 108.0 3.85 18.61 4 1 1
# ...

或者您可以在 group_by_at 内移动列选择使用 vars和列选择辅助函数:
mtcars %>% 
filter(disp < 160) %>%
group_by_at(vars(matches('[a-z]{3,}$'))) %>%
summarise(n = n())

# A tibble: 12 x 8
# Groups: mpg, cyl, disp, drat, qsec, gear [?]
# mpg cyl disp drat qsec gear carb n
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
# 1 19.7 6 145.0 3.62 15.50 5 6 1
# 2 21.4 4 121.0 4.11 18.60 4 2 1
# 3 21.5 4 120.1 3.70 20.01 3 1 1
# 4 22.8 4 108.0 3.85 18.61 4 1 1
# ...

关于r - dplyr group by colnames 描述为字符串向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47912107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com