Суммируйте определенные строки для каждого столбца

Я уверен, что мою проблему легко решить, к сожалению, я не могу найти простое решение для себя. Я хочу суммировать определенные строки набора данных для каждого столбца.

Мой набор данных выглядит так:

    GIVN  MICP  GFIP
-2  0.01  0.02  0.01
-1  0.03 -0.01  0.01
0  -0.02 -0.03  0.01
1  -0.04  0.05 -0.02
2   0.01  0.02  0.03

Теперь я хочу, чтобы он суммировался один раз от строки -1 до 1 и от строки -2 до 1 для каждого столбца.

Это должно выглядеть так от -1 до 1:

    GIVN  MICP  GFIP
   -0.03  0.01  0.00

С помощью функции colSums я только добавляю все строки из каждого столбца, а это не то, что я хочу делать.

1 ответ

Это вариант с dplyr, но это немного неуклюже. Хитрость заключается в том, что вы не аккуратно разбиваете ID на взаимоисключающие группы, поэтому вам нужно работать с по существу отдельными фреймами данных, а затем связывать их вместе.

Сначала вам нужно, чтобы имена строк были числовыми, чтобы вы могли сравнивать диапазоны номеров.

Вы будете фильтровать данные по группам идентификаторов; dplyr::between является утилитой для определения, находится ли число в диапазоне, включая конечные точки диапазона. Я добавляю переменную с mutate указать, из какой группы поступают данные; если вам не нужно это прописано, вы можете бросить mutateи просто добавить .id аргумент в bind_rows, Вам просто понадобится какой-то способ дифференциации групп, когда вы подводите итоги.

Это идет внутри bind_rows звонок, который как rbind но может занять более 2 кадров данных одновременно. затем group_by и подвести итог. Если у вас слишком много столбцов и их имена summarise_at становится громоздким, вы можете вместо этого сбросить идентификатор и использовать summarise_all или же summarise_if,

library(dplyr)
df$id <- as.numeric(row.names(df))

bind_rows(
  df %>% filter(between(id, -1, 1)) %>% mutate(group = "-1 to 1"),
  df %>% filter(between(id, -2, 1)) %>% mutate(group = "-2 to 1")
) %>%
  group_by(group) %>%
  summarise_at(vars(GIVN:GFIP), sum)
#> # A tibble: 2 x 4
#>   group    GIVN  MICP  GFIP
#>   <chr>   <dbl> <dbl> <dbl>
#> 1 -1 to 1 -0.03  0.01  0   
#> 2 -2 to 1 -0.02  0.03  0.01

Создано в 2018-12-17 пакетом представлением (v0.2.1)

Другие вопросы по тегам