我确定我的问题很容易解决,但是我无法为自己提供一个简单的解决方案。我想为每列汇总数据集的某些行。
我的数据集如下:
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函数,我只添加了每一列的所有行,这不是我想要的。
答案 0 :(得分:0)
这是dplyr
的选项,但是有点笨拙。棘手的原因是您没有将ID干净地切成互斥的组,因此您需要使用本质上独立的数据帧,然后将它们绑定在一起。
首先,您需要将行名输入数字,以便可以比较数字范围。
您将过滤ID组的数据; dplyr::between
是一种实用程序函数,用于查找数字是否在范围内,包括范围的端点。我在mutate
中添加了一个变量,以指定来自哪个组数据;如果不需要说明,可以删除mutate
,而只需在.id
中添加一个bind_rows
参数。总结时,您只需要一些区分组的方法。
这是在bind_rows
调用内进行的,就像rbind
一样,但是一次可以获取2个以上的数据帧。然后group_by
进行总结。如果您有太多的列,并且在summarise_at
中命名它们很麻烦,则可以删除ID并使用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
由reprex package(v0.2.1)于2018-12-17创建