2014-11-19 3 views
-1

У меня есть следующие данные:R - Sum ряды той же категории

df1 <- data.frame(Observation=c("A", "B", "B", "B", "C", "C", "C"), 
        Type=c(1,2,2,1,1,1,2), Value= c(1.5,1,3,2.1,3,4,6)) 

Я хочу суммировать строки каждого наблюдения, которая имеет тот же тип данных (1 или 2), так что это выглядит следующим образом :

df2 <- data.frame (Observation=c("A", "B", "B", "C", "C"), 
       Type=c(1,2,1,1,2), Value= c(1.5,4,2.1,7,6)) 

Я тщательно изучил соответствующий вопрос, но не мог его назвать.

ответ

1
> aggregate(Value~Type+Observation,df1,sum) 
    Type Observation Value 
1 1   A 1.5 
2 1   B 2.1 
3 2   B 4.0 
4 1   C 7.0 
5 2   C 6.0 
2

Попробуйте data.table

library(data.table) 
setDT(df1)[, list(Value=sum(Value, na.rm=TRUE)), by=list(Observation, Type)] 
# Observation Type Value 
#1:   A 1 1.5 
#2:   B 2 4.0 
#3:   B 1 2.1 
#4:   C 1 7.0 
#5:   C 2 6.0 
1

решение с dplyr:

library(dplyr) 
df1 %>% 
    group_by(Observation, Type) %>% 
    summarise(Value = sum(Value)) 
Смежные вопросы