我的数据框看起来像下面的前两列
我想添加第三列,等于 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/