【问题标题】:How to sum columns by two groups, then collapse the rows in R data frame如何按两组对列求和,然后折叠R数据框中的行
【发布时间】:2016-02-26 03:46:46
【问题描述】:

我已经进行了很多搜索,但无法确切地知道如何做到这一点。希望这里有人可以提供帮助。

我在 R 中有一个数据框,如下所示:`

  year id soak pots week fleet
1 2009 42    4   20    1  cr23
2 2009 42    3   15    1  cr23
3 2009 42    4   20    1  cr23
4 2010 42    3   15    1  cr23
5 2010 42    3   15    1  cr23
6 2010 42    3   65    1  cr23

我想要做的是最终得到一个新的(较小的)数据框或数据表: 1) 将每个“id”、“week”和“year”的“pots”列相加。 2) 平均每个“id”、“周”和“年”的“浸泡”列。 3) 将 'fleet' 和 'id' 值(在周和年之间没有变化)保留在新数据框中(尽管我只需要为每一行的这些变量设置 1 个值)。

有什么想法吗?我确信在 data.table 中有一种方法可以做到这一点,但到目前为止我还想不通。 谢谢!

【问题讨论】:

    标签: r dataframe data.table


    【解决方案1】:

    对于data.table

    setDT(DF)
    DF[ , .(pots = sum(pots), soak = mean(soak)),
       by = .(id, week, year, fleet, id)]
    

    既然您确定fleetididxweekxyear 中没有变化,我们可以将它们添加到by 而无需更改任何内容。

    替代方法是将它们添加到j 并从by 中排除它们:

    .(pots = sum(pots), soak = mean(soak), fleet = fleet[1L], id = id[1L])
    

    【讨论】:

    • 这很好用。谢谢!出于某种原因,我在理解如何使用 data.table 时遇到了很多麻烦,尽管我已经尝试了一段时间。
    • @user1754348 go through the Getting Started guide 从来不是一个坏主意
    【解决方案2】:

    这会让你开始

    library(dplyr)
    your.data %>%
      group_by(id, week, year) %>%
      summarise(total = sum(pots))
    

    【讨论】:

      猜你喜欢
      • 2013-05-22
      • 1970-01-01
      • 2023-03-07
      • 2020-11-26
      • 2019-01-20
      • 2016-06-05
      • 1970-01-01
      • 2019-11-21
      • 2022-07-21
      相关资源
      最近更新 更多