2016-06-14 160 views
-1

我是比较新的R,试图根据。我的数据帧等栏目获得列的总和列值的总和是像下面基于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年554 EVENTID,EVENTID 961从第二年,EVENTID 341 4,610 EVENTID从YEAR 5.

+0

这种dplyr软件包真的很简单。有很多教程可用。下面是一个例子:[http://www.sharpsightlabs.com/dplyr-intro-data-manipulation-with-r/](http://www.sharpsightlabs.com/dplyr-intro-data-manipulation-与-r /) –

+0

你必须编辑你的帖子:EventID 968不是第4年中最高的一个。 –

+0

'sum(tapply(df $ LOSS,df $ YEAR,max))' –

回答

1

这是一个容易与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) 
+0

谢谢!工作得很好 – Rags

0
sum(unique(ave(df$LOSS, df$YEAR, FUN = max))) 

输出:

[1] 1842727 
0

我更倾向于去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 
+0

谢谢!工作得很好 – Rags