Как суммировать все столбцы, кроме одного (-ых), которые я указываю? - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу суммировать все, кроме одного числового столбца в этом кадре данных.

Group, Registered, Votes, Beans
A,     111,        12,     100
A,     111,        13,     200
A,     111,        14,     300

Я хочу сгруппировать это по Group, суммируя все столбцы, кроме Registered.

summarise_if(
  .tbl = group_by(
    .data = x,
    Precinct
  ),
  .predicate = is.numeric,
  .funs = sum
)

Проблема в том, что результатом является кадр данных, который суммирует ВСЕчисловые столбцы, в том числе Registered.Как мне сложить все, кроме Registered?

Вывод, который я хочу, выглядел бы так:

Group, Registered, Votes, Beans
A,     111,        39,    600

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018
dt = read.table(text = "
Group Registered Votes Beans
A     111        12     100
A     111        13     200
A     111        14     300
", header=T)

library(dplyr)

# specify grouping variables
v1 = "Group"
v2 = "Registered"

dt %>%
  group_by_(v1, v2) %>%
  summarise_all(sum) %>%
  ungroup()

# # A tibble: 1 x 4
#     Group Registered Votes Beans
#     <fct>      <int> <int> <int>
#   1 A            111    39   600

Обратите внимание, что я должен предположить, что в каждом значении Group есть уникальное значение Registered, поэтому вы можете группировать по обеим переменным вместо группировки только по Group и сохранять уникальное значение Registered.

0 голосов
/ 28 ноября 2018

Мы можем использовать summarise_if

library(dplyr)
df %>% 
   select(-Registered) %>%
   summarise_if(is.numeric, sum)
#  Votes Beans
#1    39   600
0 голосов
/ 28 ноября 2018

Я бы использовал summarise_at и просто сделал бы логический вектор, который FALSE для нечисловых столбцов и Registered и TRUE в противном случае, т.е.

df %>% 
  summarise_at(which(sapply(df, is.numeric) & names(df) != 'Registered'), sum)

Если вы хотитепросто суммируйте все, кроме одного столбца, который вы можете сделать

df %>% 
  summarise_at(vars(-Registered), sum)

, но в этом случае вы должны проверить, является ли он также числовым.

Примечания:

  • коэффициенты являются технически числовыми, поэтому если вы хотите исключить нечисловые столбцы и коэффициенты, замените sapply(df, is.numeric) на sapply(df, function(x) is.numeric(x) & !is.factor(x))

  • Если ваши данные большиеЯ думаю, что быстрее использовать sapply(df[1,], is.numeric) вместо sapply(df, is.numeric).(Кто-то, пожалуйста, поправьте меня, если я ошибаюсь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...