Суммируйте определенные строки для каждого столбца
Я уверен, что мою проблему легко решить, к сожалению, я не могу найти простое решение для себя. Я хочу суммировать определенные строки набора данных для каждого столбца.
Мой набор данных выглядит так:
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)