简体   繁体   中英

summarise_at dplyr multiple columns

I am trying to apply a complex function on multiple columns after applying a group on it.

library(dplyr)
data(iris)

add = function(x,y) {
    z = x+y
    return(mean(z))
}

iris %>%
  group_by(Species) %>%
  summarise_at(.vars=c('Sepal.Length', 'Sepal.Width'), 
           .funs =  add('Sepal.Length', 'Sepal.Width' ) )

Don't think you need summarise_at , since your definition of add takes care fo the multiple input arguments. summarise_at is useful when you are applying the same change to multiple columns, not for combining them.

If you just want sum of the columns, you can try:

iris %>%
  group_by(Species) %>%
  summarise_at(
    .vars= vars( Sepal.Length, Sepal.Width), 
    .funs =  sum) 

which gives:

     Species Sepal.Length Sepal.Width
      <fctr>        <dbl>       <dbl>
1     setosa          250         171
2 versicolor          297         138
3  virginica          329         149

in case you want to add the columns together, you can just do:

iris %>%
  group_by(Species) %>%
  summarise( k = sum(Sepal.Length, Sepal.Width))

which gives:

     Species     k
      <fctr> <dbl>
1     setosa   422
2 versicolor   435
3  virginica   478

using this form with your definition of add

add = function(x,y) {
  z = x+y
  return(mean(z))
}


iris %>%
  group_by(Species) %>%
  summarise( k = add(Sepal.Length, Sepal.Width))

returns

     Species     k
      <fctr> <dbl>
1     setosa     8
2 versicolor     9
3  virginica    10

summarize() already allows you to summarize multiple columns.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM