R 带窗长的滚筒长度>;1:填充缺少的值
我的数据框看起来像下面的前两列R 带窗长的滚筒长度>;1:填充缺少的值,r,dplyr,zoo,R,Dplyr,Zoo,我的数据框看起来像下面的前两列 df %>% group_by(ID) %>% mutate(SUM=rollsumr(VAL, k=min(3, row_number())) %>% ungroup() 我想添加第三列,等于ID组对VAL的最后三个观察值之和 使用以下命令,我获得了以下输出: df %>% group_by(ID) %>% mutate(SUM=rollsumr(VAL, k=3)) %>% ungrou
df %>%
group_by(ID) %>%
mutate(SUM=rollsumr(VAL, k=min(3, row_number())) %>%
ungroup()
我想添加第三列,等于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
...
我现在希望能够填充前两行组单元格的NAs结果
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()
及
但两者都给了我同样的错误,因为我有一组大小不是一个直接的答案,但一种方法是将
NA
s的值替换为cumsum
ofVAL
library(dplyr)
library(zoo)
df %>%
group_by(ID) %>%
mutate(SUM = rollsumr(VAL, k=3, fill = NA),
SUM = ifelse(is.na(SUM), cumsum(VAL), SUM))
# ID VAL SUM
# <int> <int> <int>
#1 1 2 2
#2 1 1 3
#3 1 3 6
#4 1 4 8
或者,您可以使用同一软件包中的
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
df%>%
分组依据(ID)%>%
mutate(SUM=rollappy(VAL,width=3,FUN=SUM,partial=TRUE,align=“right”))
ID VAL SUM
1 1 2 2
2 1 1 3
3 1 3 6
4 1 4 8
由于参数
partial=TRUE
,也会对长度为3的所需窗口下方的行求和 rollsumr是来自哪个软件包的?zoo软件包。我编辑了问题的文本以包含我需要的输出。
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