基于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中其他列的列值总和[重复]的主要内容,如果未能解决你的问题,请参考以下文章