0

I have a data frame with these variables:

     Datum value  morph sex product
2016-04-05     5 Winter   M     ACV
2016-04-05     1 Summer   M     ACV
2016-04-05    18 Winter   F     ACV
2016-04-05     3 Summer   F     ACV
2016-04-05     0 Winter   M     FRA
2016-04-05     0 Summer   M     FRA
2016-04-05     0 Winter   F     FRA
2016-04-05     0 Summer   F     FRA
2016-04-08     0 Winter   M     ACV
2016-04-08     0 Summer   M     ACV

I want to sum the values of F and M, but keep seperate values for morph and product. Now I have 8 values per date and I should go to 4. How do I do this?

I read about tapply, ddplyr and aggregate, but I either don't understand them well or they're not the solution to my problem...

Summing things I know how to do, but not while keeping the other columns.

Tingolfin
  • 825
  • 8
  • 28

1 Answers1

2

This is just an example of grouping and summing over a column or group of columns

with ddply

> ddply(df, c("morph", "sex", "product"), summarise, sum_values = sum(value))
   morph sex product ..1
1 Summer   F     ACV   3
2 Summer   F     FRA   0
3 Summer   M     ACV   1
4 Summer   M     FRA   0
5 Winter   F     ACV  18
6 Winter   F     FRA   0
7 Winter   M     ACV   5
8 Winter   M     FRA   0

with dplyr()

library(dplyr)
> df %>% group_by(morph, sex, product) %>% summarise("sum_values"  = sum(value))
   morph   sex product sum_values
   (chr) (chr)   (chr)      (int)
1 Summer     F     ACV          3
2 Summer     F     FRA          0
3 Summer     M     ACV          1
4 Summer     M     FRA          0
5 Winter     F     ACV         18
6 Winter     F     FRA          0
7 Winter     M     ACV          5
8 Winter     M     FRA          0

with data.table

df[ , .(sum_values = sum(value)),by = c("morph", "sex", "product")]
    morph sex product sum_values
1: Winter   M     ACV          5
2: Summer   M     ACV          1
3: Winter   F     ACV         18
4: Summer   F     ACV          3
5: Winter   M     FRA          0
6: Summer   M     FRA          0
7: Winter   F     FRA          0
8: Summer   F     FRA          0
joel.wilson
  • 8,243
  • 5
  • 28
  • 48