R - как сложить каждый столбец из df - PullRequest
0 голосов
/ 12 мая 2019

У меня есть этот df

df <- read.table(text="
   id     month  gas  tickets
   1      1      13   14
   2      1      12   1
   1      2      4    5
   3      1      5    7
   1      3      0    9
", header=TRUE)

Что мне нравится делать, так это вычислять сумму бензина, билетов (и еще 50+ строк в моем реальном df) за каждый месяц. Обычно я делал бы что-то вроде

result <-
 df %>%
 group_by(month) %>%
 summarise(
   gas = sum(gas),
   tickets = sum(tickets)
 ) %>%
 ungroup()

Но поскольку в моем фрейме данных действительно много столбцов, я не хочу повторяться, создавая функцию суммы для каждого столбца. Мне интересно, возможно ли создать какую-то более элегантную функцию или что-то, что создаст сумму каждого столбца, кроме идентификатора и месяца с сгруппированным столбцом месяца.

Ответы [ 2 ]

3 голосов
/ 12 мая 2019

Вы можете использовать summarise_at(), чтобы игнорировать id и суммировать остальные:

df %>%
  group_by(month) %>%
  summarise_at(vars(-id), list(sum = ~sum))

# A tibble: 3 x 3
  month gas_sum tickets_sum
  <int>   <int>       <int>
1     1      30          22
2     2       4           5
3     3       0           9
1 голос
/ 12 мая 2019

Вы можете использовать aggregate, как рекомендует Маркус в комментариях.Если вы хотите придерживаться тидиверса, вы можете попробовать что-то вроде этого:

df %>% 
    select(-id) %>% 
    group_by(month) %>% 
    summarise_if(is.numeric, sum)

#### OUTPUT ####

# A tibble: 3 x 3
  month   gas tickets
  <fct> <int>   <int>
1 1        30      22
2 2         4       5
3 3         0       9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...