dplyr 组不使用美元符号 data$column 语法
Posted
技术标签:
【中文标题】dplyr 组不使用美元符号 data$column 语法【英文标题】:dplyr groups not working with dollar sign data$column syntax 【发布时间】:2021-08-20 16:06:45 【问题描述】:我正在寻找每个组的列的最小值和最大值:
mtcars %>%
group_by(mtcars$cyl) %>%
summarize(
min_mpg = min(mtcars$mpg),
max_mpg = max(mtcars$mpg)
)
# # A tibble: 3 x 3
# `mtcars$cyl` min_mpg max_mpg
# <dbl> <dbl> <dbl>
# 1 4 10.4 33.9
# 2 6 10.4 33.9
# 3 8 10.4 33.9
它在大多数情况下都有效,并且数据集的格式看起来不错。但是,它给出了整个数据集的最小值和最大值,而不是每个单独的组。
【问题讨论】:
@GregorThomas,我觉得这些天来这是一个很常见的问题,但我找不到一个好的“欺骗”问题/答案。 (更不用说搜索以"$"
为中心的问题并不容易。)你知道吗?将其添加到r-faq 可能会很好?
@GregorThomas 谢谢!这确实有效。这肯定会在将来使用 dplyr 时对我有所帮助。
非常同意将其添加到 r-faq。我会将我的评论转换为答案。但是 SO 搜索起作用了吗?我现在没有得到任何搜索 [r-faq]
标签的结果,但我可以按问题标题搜索并找到常见问题解答...
@r2evans 但如果这是一个常见问题解答,那么现在真正的挑战是使其尽可能可搜索
我建议包含“dollar-sign”或“dollar”,这是我的一次搜索尝试(不是很成功)。
【参考方案1】:
不要在 dplyr
函数中使用 $
,它们需要不带引号的列名。
mtcars$mpg
专门引用原始输入数据框的整个列,而不是来自group_by
的分组小标题。更改您的代码以删除data$
,它将起作用:
mtcars %>%
group_by(cyl) %>%
summarize(
min_mpg = min(mpg),
max_mpg = max(mpg)
)
# # A tibble: 3 x 3
# cyl min_mpg max_mpg
# <dbl> <dbl> <dbl>
# 1 4 21.4 33.9
# 2 6 17.8 21.4
# 3 8 10.4 19.2
(更不用说打字少了很多!)
【讨论】:
以上是关于dplyr 组不使用美元符号 data$column 语法的主要内容,如果未能解决你的问题,请参考以下文章