1

我确信我的问题很容易解决,不幸的是我无法为自己想出一个简单的解决方案。我想为每一列总结数据集的某些行。

我的数据集如下所示:

    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 函数,我只添加每列中的所有行,这不是我想要做的。

4

1 回答 1

0

这是一个带有 的选项dplyr,但它有点笨重。棘手之处在于您没有将 ID 完全切割成互斥的组,因此您需要使用基本上独立的数据帧进行操作,然后将它们重新绑定在一起。

首先,您需要您的行名是数字,以便您可以比较数字范围。

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

这进入了一个bind_rows调用,这就像rbind但一次可以获取超过 2 个数据帧。然后group_by总结一下。如果您有太多列并且命名它们summarise_at变得很麻烦,您可以改为删除 ID 并使用summarise_allor 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 日创建

于 2018-12-17T22:07:46.610 回答