总结每一列的特定行

时间:2018-12-17 14:16:28

标签: r sum rowsum

我确定我的问题很容易解决,但是我无法为自己提供一个简单的解决方案。我想为每列汇总数据集的某些行。

我的数据集如下:

    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 个答案:

答案 0 :(得分:0)

这是dplyr的选项,但是有点笨拙。棘手的原因是您没有将ID干净地切成互斥的组,因此您需要使用本质上独立的数据帧,然后将它们绑定在一起。

首先,您需要将行名输入数字,以便可以比较数字范围。

您将过滤ID组的数据; dplyr::between是一种实用程序函数,用于查找数字是否在范围内,包括范围的端点。我在mutate中添加了一个变量,以指定来自哪个组数据;如果不需要说明,可以删除mutate,而只需在.id中添加一个bind_rows参数。总结时,您只需要一些区分组的方法。

这是在bind_rows调用内进行的,就像rbind一样,但是一次可以获取2个以上的数据帧。然后group_by进行总结。如果您有太多的列,并且在summarise_at中命名它们很麻烦,则可以删除ID并使用summarise_allsummarise_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创建