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 语法的主要内容,如果未能解决你的问题,请参考以下文章

变量前的美元符号

Vue中美元$符号的意思

重新审视 data.table 与 dplyr 的内存使用

KNA的PCA:插入符号中的预处理参数

覆盖使用 Dplyr - R 过滤的 data.frame 上的值

dplyr 重命名 - 错误:`new_name` = old_name 必须是符号或字符串,而不是公式