Ошибка использования абсолютной разницы в пакете dplyr? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть фрейм данных, который выглядит следующим образом.

df <- data.frame(Year = c(2016,2017,2016,2017),
                 Month = c(1,2,1,2),
                 valueA = c(40,29,25,22),
                 valueB = c(40,36,31,30))

Я sh для вычисления разницы путем группировки столбцов по году и месяцу.

abs(aggregate(.~ Year + Month, df, diff))
#  Year Month valueA valueB
#1 2016     1     15      9
#2 2017     2      7      6

То же самое, если я пытаюсь использовать пакет dplyr, он не работает.

 library(dplyr)
    df %>% group_by(Year, Month) %>% summarise_all(abs(diff))
    #Error in abs(diff) : non-numeric argument to mathematical function

С другой стороны, если я удалю функцию abs, она сработает.

df %>% group_by(Year, Month) %>% summarise_all((diff))
 

    #Year Month valueA valueB
     # <dbl> <dbl>  <dbl>  <dbl>
    #1  2016     1    -15     -9
    #2  2017     2     -7     -6

Любая идея относительно того, почему возникает ошибка и как можно достичь желаемого результата из пакета dplyr?

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Вы можете попробовать вычислить абсолютные значения после summarise_all:

df %>% 
  group_by(Year, Month) %>%
  summarise_all(diff) %>% 
  mutate_all(abs)
1 голос
/ 01 августа 2020

Если вы хотите применить одну функцию, вы можете просто передать summarise имя функции. Однако, если вы хотите применить составную функцию, вам нужно быть более явным. Попробуйте это:

df <- data.frame(Year = c(2016,2017,2016,2017),
                 Month = c(1,2,1,2),
                 valueA = c(40,29,25,22),
                 valueB = c(40,36,31,30))

library(dplyr)
df %>% group_by(Year, Month) %>% summarise_all(~ abs(diff(.x)))
#> # A tibble: 2 x 4
#> # Groups:   Year [2]
#>    Year Month valueA valueB
#>   <dbl> <dbl>  <dbl>  <dbl>
#> 1  2016     1     15      9
#> 2  2017     2      7      6
...