通过仅取组中与另一列上的选定行相等的行的平均值,在 R 中的组中进行变异

问题描述 投票:0回答:1

我遇到了一个问题,我正在按一个变量(组)对数据集进行分组,并希望创建一个新的输出列,该列是每个组中值列的平均值,并且添加了我们只想要的条件在计算均值时,考虑在列天的给定行值的 1 以内的值。

所以如果同一行的三行有day={1,2,3},第一行和第三行将只有包括他们自己和第二行的均值,但是第二行的均值包括所有三个值。

本质上,我想知道如何访问特定行的日值,然后使用它来获取日值接近该数字的行组的子集。

所以如果输入是

index    group  day     value
1        A      1       10
2        A      2       20
3        A      3       30
4        B      2       20
5        B      3       30
6        B      5       50

输出应该看起来像

index    group  day     value  output
1        A      1       10      15
2        A      2       20      20
3        A      3       30      25
4        B      2       20      25
5        B      3       30      25
6        B      5       50      50

我试过按组和天分组,但随后将给定行的 day=+-1 的行包含在平均值中似乎计算量太大,无法与我正在使用的大型数据集一起运行。

r dplyr data-analysis mean mutate
1个回答
0
投票
df %>%
  group_by(group) %>%
  mutate(output = slider::slide_index_dbl(value, day, mean, .before = 1, .after = 1)) %>%
  ungroup()

或者使用 dplyr v1.1.0+,跳过 group_by/ungroup 并在 mutate 行中添加

.by = group

结果

# A tibble: 6 × 5
  index group   day value output
  <int> <chr> <int> <int>  <dbl>
1     1 A         1    10     15
2     2 A         2    20     20
3     3 A         3    30     25
4     4 B         2    20     25
5     5 B         3    30     25
6     6 B         5    50     50
© www.soinside.com 2019 - 2024. All rights reserved.