【问题标题】:How can I sum a column in a dataframe after a group_by?如何在 group_by 之后对数据框中的列求和?
【发布时间】:2019-02-05 00:51:09
【问题描述】:

我想使用 group_by 函数创建一个数据框,然后根据 group_by 对列求和。到目前为止,我只能对整列求和,而不是在组内求和。

我有一个数据框:

old_df <- data_frame(category1 = c("a", "a", "b", "b"),
                     category2 = c("2", "1", "3", "4"))

从这里开始,我想对 category1(“a”和“b”)进行分组,并分别为“a”和“b”求和 category2。它看起来像这样:

new_df <- data_frame(category1 = c("a", "b"),
                     Sum_category2 = c("3", "7"))

我已经尝试了一些东西,我认为下面的这个应该可以工作。

new_df <- old_df %>%
 group_by(category1) %>%
 summarize(Sum_category2 = sum(category2))

到目前为止,我所做的一切都只是总结了整个 category2 列,在这种情况下等于 10。我怎样才能让它只在分组内求和?

【问题讨论】:

  • 为什么category2 设置为字符变量?如果我运行您的代码,它会因此返回错误。如果我将 category2 设置为数字 c(2, 1, 3, 4) 您的代码将按预期工作。
  • 你说得对,category2 是数字,我的错。当我以这种方式运行代码时,我只收到一个 1 x 1 的小标题,其中包含整个 category2 列的总和。有什么想法吗?
  • 请参阅下面来自@user1357015 的答案。你无法从答案中的数据和代码中得到你描述的输出,所以肯定有些不同。
  • 我最终使用了前缀dplyr::summarize 并解决了这个问题。
  • 也许你也加载了plyr 包;这可能会导致 summarise 出现问题。

标签: r


【解决方案1】:

我不确定您为什么将字符串用于第 2 类,但以下工作正常。

library(dplyr)

old_df <- data.frame(category1 = c("a", "a", "b", "b"),
                 category2 = c(2, 1, 3, 4))

old_df %>% group_by(category1) %>% summarize(sum_category = sum(category2))

old_df
    # A tibble: 2 x 2
  category1 sum_category
  <fct>            <dbl>
1 a                    3
2 b                    7

【讨论】:

  • 可以使用old_df$category2 &lt;- as.double(old_df$category2)转换成数值向量
  • 对不起,category2 确实已经是一个数字了。但是,当我像上面那样运行代码时,我只会得到一个 1x1 的 tibble,其中包含 category2 的总和。有什么想法吗?
猜你喜欢
  • 2013-04-27
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 2018-10-31
  • 2020-02-11
相关资源
最近更新 更多