【问题标题】:dplyr: group_by + summarize not working as expecteddplyr:group_by + 总结没有按预期工作
【发布时间】:2020-05-14 11:41:26
【问题描述】:

我在使用 R 的 group_by 和 summarise 函数时遇到了一些麻烦,想知道你们是否可以帮我一些忙。我有一个类似这样的表:

Category     Frequency
    First        1
    First        4
    Second       6
    First        1
    Third        1
    Third        2
    Second       6
    First        2
    Second       1

我正在尝试使用 dplyr 的 group_by 并汇总以找到频率列的平均值。这是我的示例代码:

    table %>%
         group_by(table$Category) %>%
         summarize(meanfrequency = mean(table$frequency))

我所期望的是一个表格被吐出,分解按单个类别分组的平均频率,如下所示:

Category     Frequency
    First        2
    Second       4.33
    Third        1.5

但是,我收到的是一个按类别分组的表格,每个类别都接收整个表格的平均值,如下所示:

   Category     Frequency
    First        2.66
    Second       2.66
    Third        2.66

有什么线索知道这里发生了什么吗?我应该说我是初学者,所以也许我遗漏了一些明显的东西。我应该注意到,在我的实际表中,除了我试图分析的 2 之外,表中还有几个变量,但不确定这是否相关或可能会弄乱某些东西。我还使用 Rstudio 内置的 readxcl 包将这些数据加载到 R 中。

提前致谢!

【问题讨论】:

  • 什么是“readxcl”? readxl?我不认为它内置在 RStudio 中。 dplyr 函数通常不需要table$ 部分,只需要裸列名称

标签: r dplyr


【解决方案1】:

我们使用$ 提取整个列,而不是使用不带引号的列名来仅获取每个“类别”中的“频率”值

library(dplyr)
table %>%
     group_by(Category) %>%
     summarize(meanfrequency = mean(Frequency))
# A tibble: 3 x 2
#  Category meanfrequency
#  <chr>            <dbl>
#1 First             2   
#2 Second            4.33
#3 Third             1.5 

如果我们在链内做table$Frequency,它与我们在外面做的类似。另外,R 区分大小写,所以需要table$Frequency 而不是table$frequency

mean(table$Frequency) 

另外,table 是一个函数/类名,所以最好不要用这些名称命名对象

数据

table <- structure(list(Category = c("First", "First", "Second", "First", 
"Third", "Third", "Second", "First", "Second"), Frequency = c(1L, 
4L, 6L, 1L, 1L, 2L, 6L, 2L, 1L)), class = "data.frame", row.names = c(NA, 
-9L))

【讨论】:

  • 啊,刚刚试了一下,它似乎奏效了!在此感谢您的帮助,朋友。
  • 有点晚了,但只是点击了勾号!再次感谢您的快速友好的回答。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 2020-03-18
  • 2012-06-14
  • 2014-11-15
  • 1970-01-01
  • 2012-07-02
  • 2011-09-07
  • 2013-03-03
相关资源
最近更新 更多