我遇到了一个问题,我正在按一个变量(组)对数据集进行分组,并希望创建一个新的输出列,该列是每个组中值列的平均值,并且添加了我们只想要的条件在计算均值时,考虑在列天的给定行值的 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 的行包含在平均值中似乎计算量太大,无法与我正在使用的大型数据集一起运行。
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