gpt4 book ai didi

r - dplyr group_by 中的复杂列选择

转载 作者:行者123 更新时间:2023-12-01 23:14:56 26 4
gpt4 key购买 nike

我想在 group_by 调用中使用 dplyr 的列选择器,例如 starts_with()ends_with()matches()、...,甚至语法 -colName

(愚蠢)我所使用的语法示例:

library("dplyr")

# I would like to do something like this
mtcars %>%
group_by(matches("a")) %>%
summarise(mpg=mean(mpg))
# but I get a "wrong result size" error

我希望它能起作用,类比:

mtcars %>% select(matches("a"))

此处将选择列drat、am、gear、carb

说得非常清楚:我想使用 matches("a") (或等效项)来实现与以下内容相同的输出:

mtcars %>% 
group_by(drat, am, gear, carb) %>%
summarise(mpg=mean(mpg))

我只对使用 dplyr 的答案感兴趣。谢谢!

<小时/>

当前的答案虽然不错,但只允许使用正则表达式选择列。

我仍在寻找一个更全局的答案,该答案将允许使用 dplyr 的全部选择语法。当然,我可以调整任何正则表达式来选择我想要的内容,但我希望我有一些与 dplyr 更好地集成的东西(特别是使用 -colName 语法)。我将把它打开一段时间。

最佳答案

这里有一个构建您自己的 group_at() 的选项,我认为 matches 和 SE group_by_() 不存在该选项功能:

mtcars %>% 
group_by_(.dots = names(mtcars)[matches("a", vars = names(mtcars))]) %>%
summarise(mpg = mean(mpg))

#Source: local data frame [26 x 5]
#Groups: drat, am, gear [?]

# drat am gear carb mpg
# <dbl> <dbl> <dbl> <dbl> <dbl>
#1 2.76 0 3 1 18.10
#2 2.76 0 3 2 15.50
#3 2.93 0 3 4 10.40
#4 3.00 0 3 4 10.40
#5 3.07 0 3 3 16.30
#6 3.08 0 3 1 21.40
#7 3.08 0 3 2 19.20
#8 3.15 0 3 2 16.95
#9 3.21 0 3 4 14.30
#10 3.23 0 3 4 14.70
# ... with 16 more rows

或者等效地,只需使用grep:

mtcars %>% 
group_by_(.dots = grep('a', names(mtcars), value = TRUE)) %>%
summarise(mpg=mean(mpg))

关于r - dplyr group_by 中的复杂列选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40871219/

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