当前位置: 首页 > 知识库问答 >
问题:

dplyr:group_by总结没有按预期工作

许俊贤
2023-03-14

我在使用R的group_by和SUMMARY函数时遇到了一些问题,我想知道你们是否可以帮我一些忙。我有一张类似的表格:

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

我试图使用dplyr的group_by和SUMMARY来找到频率列的平均值。下面是我的示例代码:

    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中。

提前感谢!

共有1个答案

夏弘文
2023-03-14

我们用< code>$提取整个列,而我们可以只使用不带引号的列名来获得每个“类别”中的“频率”值

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 

如果我们在链内做表$频率,它类似于我们在链外做的。此外,R 区分大小写,因此需要表$频率而不是表频率

mean(table$Frequency) 

此外,是函数/类名,因此最好不要使用这些名称命名对象

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))
 类似资料:
  • 我已经配置了log4j2.xml文件,application.log文件将被创建,它应该每天翻转。 但是在JVM中,applicatoin.log文件在10MB之后会翻转,如果翻转三次,第一个文件会被覆盖。也就是说我随时都application.logapplication-2020-10-16.log.zip. 为什么log4j2(v2.13)即使配置为每日,也会每10MB滚动一次文件?任何在l

  • 现在,在我的drools项目中,我在单独的DRL文件中有两组规则,它们由议程组分割。对于议程组“preCheck”,我将该议程组中的每个规则的自动聚焦设置为true。例子: 对于另一个议程组-“default规则”-规则没有设置自动焦点属性。示例: 在通过RESTAPI调用规则时,我还试图通过JSON负载将焦点设置为“preCheck”议程组。例子: 然而,在执行规则时,似乎首先要评估“defau

  • 我正试图将一个阻塞消费者集成为Reactor铝-SR1中的助焊剂订户。我想使用一个并行调度器,并发地执行阻塞操作。 我实现了一个主类来描述我意图:

  • 我目前正在使用Cucumber和Java开发一个基于Selenium的BDD测试自动化框架。我的框架使用Junit,由于Junit不支持软断言,所以我尝试在测试中使用AssertJ断言。然而,这些断言似乎不起作用。让我试着借助下面的代码来解释这一点:

  • 我重新安排了云firestore的安全规则,以防止在集合中重新创建文档。以下是我使用的规则: 我用这些文档路径和用户凭据在控制台中模拟了这些规则 如果我创建了一个id为09-07-2020的文档,并使用上述路径进行模拟,则会失败。当我删除文件09-07-2020时,上述模拟工作正常。因此,它在规则模拟器中运行良好。 但当我在应用程序中尝试时,每次尝试都会再次创建文档。因此,如果文档内容以前不同,则

  • 我有一个用例,我需要使用Kafka进行批处理。假设在1分钟内有大约100个请求,我不想立即发布每个请求,而是想将所有100个请求分批发布到topic一次。 但是使用以下配置,批处理不会发生,一旦发送消息,它就会发布到主题并同时在消费者中接收 生产者配置 消费者配置 在这里,我设置了 linger.ms = 60000,根据我的理解,如果 linger.ms 设置为某个值,那么即使发送方线程更早变得