【问题标题】:Sum of column values based on other columns in R [duplicate]基于R中其他列的列值总和[重复]
【发布时间】:2016-10-15 00:45:33
【问题描述】:

我对 R 比较陌生,试图根据其他列获取列的总和。我的数据框如下所示

YEAR EventID LOSS
    1     554  334740
    1     415  149816
    1     207  199446
    2     961  527042
    3     614  188199
    4     968   87044
    4     650   75377
    4     341  424678
    4     397  210730
    5     610  368068

这里我的条件是,我需要每年最高损失的总和。

损失数量:第 1 年的 EVENTID 554,第 2 年的 EVENTID 961,第 4 年的 EVENTID 341,第 5 年的 EVENTID 610。

【问题讨论】:

标签: r


【解决方案1】:
sum(unique(ave(df$LOSS, df$YEAR, FUN = max)))

输出:

[1] 1842727

【讨论】:

    【解决方案2】:

    这是一个简单的dplyr

    d %>%
       group_by(YEAR) %>%
       summarize(EventID = EventID[1],
                 max_loss = max(LOSS))
    

    您也可以多次发生具有相同最大损失的事件,然后您需要合并回原始数据集并进行过滤:

    d %>%
       group_by(YEAR) %>%
       summarize(max_loss = max(LOSS)) %>%
       left_join(d, .) %>%
       filter(LOSS == max_loss)
    

    【讨论】:

      【解决方案3】:

      对于此类任务,我更喜欢 sqldf

      library(sqldf)
      sqldf("select * from mydata 
             group by YEAR
             having LOSS=max(LOSS);")
      

      结果

      ##  YEAR EventID   LOSS
      ##     1     554 334740
      ##     2     961 527042
      ##     3     614 188199
      ##     4     341 424678
      ##     5     610 368068
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-19
        • 1970-01-01
        相关资源
        最近更新 更多