2016-06-14 6 views
-1

я относительно новым для R, пытающихся получить сумму столбца на основе других столбцов .my кадра данных, как показано нижеСумма значений столбцов на основе других столбцов в 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 

Вот мое состояние, я нужно ежегодно получать максимальную потерю.

потери номера: EventID 554 из года 1, EVENTID 961 из года 2, EVENTID 341 от 4, EVENTID 610 из года 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

Мои предпочтения идет в 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

Смежные вопросы