基于R中其他列的列值总和[重复]

Posted

技术标签:

【中文标题】基于R中其他列的列值总和[重复]【英文标题】:Sum of column values based on other columns in R [duplicate] 【发布时间】: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。

【问题讨论】:

这种事情用 dplyr 包真的很容易。有很多教程可用。这是一个,例如:http://www.sharpsightlabs.com/dplyr-intro-data-manipulation-with-r/ 您必须编辑您的帖子:EventID 968 不是第 4 年最高的。 sum(tapply(df$LOSS, df$YEAR, max)) 【参考方案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

【讨论】:

以上是关于基于R中其他列的列值总和[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 for 和 if 添加基于数据框中其他列的列值

基于其他列的列的SQL总和[关闭]

仅基于一个不同的列获取数据表的所有列值[重复]

有没有一种有效的方法来计算 Pandas 中的列值,使用基于其他列的条件值的前行的值?

基于 DataFrame 中另一列的列的滚动总和

如何根据基于其他列的列对数据框进行排序[重复]