2016-06-14 130 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