这是一个带有 的选项dplyr
,但它有点笨重。棘手之处在于您没有将 ID 完全切割成互斥的组,因此您需要使用基本上独立的数据帧进行操作,然后将它们重新绑定在一起。
首先,您需要您的行名是数字,以便您可以比较数字范围。
您将过滤 ID 组的数据;dplyr::between
是一个实用函数,用于查找一个数字是否在一个范围内,包括范围的端点。我正在添加一个变量mutate
来指定哪个组数据来自;如果您不需要说明,您可以删除mutate
s 并.id
在bind_rows
. 当你总结时,你只需要一些区分组的方法。
这进入了一个bind_rows
调用,这就像rbind
但一次可以获取超过 2 个数据帧。然后group_by
总结一下。如果您有太多列并且命名它们summarise_at
变得很麻烦,您可以改为删除 ID 并使用summarise_all
or 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
由reprex 包(v0.2.1)于 2018 年 12 月 17 日创建