-1

I have a data set

>data.frame(GROUP=c("A","A","A","G","G","F","F","E","T"), 
               FIRST=c(10,2,3,6,NA,NA,NA,1,NA), 
               SECOND=c(3,NA,NA,1,NA,4,2,1,NA), 
               THIRD=c(5,7,NA,NA,NA,1,NA,1,1))
      GROUP FIRST SECOND THIRD
    1     A    10      3     5
    2     A     2     NA     7
    3     A     3     NA    NA
    4     G     6      1    NA
    5     G    NA     NA    NA
    6     F    NA      4     1
    7     F    NA      2    NA
    8     E     1      1     1
    9     T    NA     NA     1

I want to combine the data using the GROUP-column in two ways:

Mean of columns inside a group

  GROUP FIRST SECOND THIRD
1     A     5      3     6
2     G     6      1    NA
3     F    NA      3     1
4     E     1      1     1
5     T    NA     NA     1

Column-wise max value inside a group

  GROUP FIRST SECOND THIRD
1     A    10      3     7
2     G     6      1    NA
3     F    NA      4     1
4     E     1      1     1
5     T    NA     NA     1

Is there a quick way to do this or should I create a new function?

Kara
  • 6,115
  • 16
  • 50
  • 57
Lecromine
  • 178
  • 1
  • 2
  • 10

1 Answers1

2

We can use aggregate from base R

aggregate(.~GROUP, d1, mean, na.rm = TRUE, na.action=NULL)

Or using dplyr

library(dplyr)
d1 %>%
  group_by(GROUP) %>%
  summarise_each(funs(mean=mean(., na.rm = TRUE)))

Or

d1 %>%
  group_by(GROUP) %>%
  summarise_each(funs(max=max(., na.rm = TRUE)))
akrun
  • 874,273
  • 37
  • 540
  • 662