窗口长度 > 1 : filling missing values 的 rollsumr

标签 r dplyr zoo

我的数据框看起来像下面的前两列

我想添加第三列,等于 ID 组最后三个 VAL 观察值的总和。

使用以下命令,我设法获得了以下输出:

df %>% 
  group_by(ID) %>% 
  mutate(SUM=rollsumr(VAL, k=3)) %>% 
  ungroup()

ID VAL  SUM
1  2    NA
1  1    NA
1  3    6
1  4    8
...

我现在希望能够在前两行中填充组单元格的 NA。

ID VAL  SUM
1  2    2
1  1    3
1  3    6
1  4    8
...

我该怎么做?

我尝试过以下操作

df %>% 
  group_by(ID) %>% 
  mutate(SUM=rollsumr(VAL, k=min(3, row_number())) %>% 
  ungroup()

df %>% 
  group_by(ID) %>% 
  mutate(SUM=rollsumr(VAL, k=3), fill = "extend") %>% 
  ungroup()

但两者都给我同样的错误,因为我有大小 <= 2 的组。

Evaluation error: need at least two non-NA values to interpolate.

我该怎么办?

最佳答案

或者,您可以使用同一包中的 rollapply():

df %>% 
 group_by(ID) %>% 
 mutate(SUM = rollapply(VAL, width = 3, FUN = sum, partial = TRUE, align = "right"))

     ID   VAL   SUM
  <int> <int> <int>
1     1     2     2
2     1     1     3
3     1     3     6
4     1     4     8

由于参数 partial = TRUE,还对长度为三的所需窗口下方的行求和。

关于窗口长度 > 1 : filling missing values 的 rollsumr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54397695/

相关文章:

r - 在 dplyr 中使用变量列名 (do)

r - na.locf 使用 dplyr 中的 group_by

r - 如何计算R中移动窗口内的平均斜率

r - 当只有一位数字与R不同时的数据转换

r - 为什么 sum() 可以在此 dplyr 表达式中工作,而 quantile() 则不能?

r - 使用过滤器查找每组的唯一值

html - 我可以使用 knitr 将 CSS 样式应用于单个表格单元格吗?

r - 在自定义 dplyr 包装函数中使用带引号的变量

R - dplyr 总结并保留其他列

r - 有没有办法强制 zoo::rollmean 函数返回与输入长度相同的向量? (或者可能使用其他功能?)