При использовании сводной функции я могу вернуть сумму значений, которые были распространены? - PullRequest
1 голос
/ 12 ноября 2019

Короче говоря, следующее возвращает количество цилиндров в mtcars, распределенных / развернутых по столбцам:

> mtcars %>%
+   group_by(cyl) %>% 
+   summarise(Count = n()) %>% 
+   pivot_wider(names_from = cyl,
+               values_from = Count)
# A tibble: 1 x 3
    `4`   `6`   `8`
  <int> <int> <int>
1    11     7    14

Я бы хотел сохранить значение values_from, поле Count в моем примере, показываяитого, так что на моих реальных данных я сразу вижу общую сумму Count, распределенную по каждой строке. В этом случае это будет 11 + 7 + 14 = 32.

Есть ли способ заставить pivot_wider сохранять значения в values_from, а также распределять их по столбцам?

РЕДАКТИРОВАТЬ:Желаемый вывод:

# A tibble: 1 x 4
  Count   `4`   `6`   `8`
  <dbl> <int> <int> <int>
1    32    11     7    14

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Мы можем добавить сумму значений, которые были распределены позже, используя rowSums

library(dplyr)

mtcars %>%
  count(cyl) %>%
  tidyr::pivot_wider(names_from = cyl, 
                     values_from = n) %>%
  mutate(Count = rowSums(.))

# A tibble: 1 x 4
#    `4`   `6`   `8` Count
#  <int> <int> <int> <dbl>
#1    11     7    14    32
1 голос
/ 12 ноября 2019

Мы можем создать столбец после summarise с помощью mutate, а затем сделать pivot_wider

library(dplyr)
library(tidyr)
mtcars %>%
   group_by(cyl) %>%
   summarise(Count1 = n()) %>%
   mutate(Count = sum(Count1)) %>% 
   pivot_wider(names_from = cyl, values_from = Count1)
# A tibble: 1 x 4
#  Count   `4`   `6`   `8`
#  <int> <int> <int> <int>
#1    32    11     7    14
...