[英]R dplyr - rollmean using group by columns
我有一个数据框如下:
(如果数据不符合格式,请查找图像)
Sample Data
date id name loc mean count mean
9/6/2016 kar1 AAA 100004 0 1
9/8/2016 kar1 AAA 100004 0 3
9/9/2016 kar1 AAA 100004 0 4
9/10/2016 kar1 AAA 100004 0 5
9/11/2016 kar1 AAA 100004 0 6
9/12/2016 kar1 AAA 100004 0 7
9/13/2016 kar1 AAA 100004 0 8
9/14/2016 kar1 AAA 100004 0 9
9/7/2016 blr1 BBB 100004 0 2
我正在尝试根据 id、name、loc 在计数字段上计算((7 天滚动平均值))3 天滚动平均值(前 3 天和后 3 天),但结果不符合预期。
找到以下代码:
fnrollmean <- function(x) rollmean(df$count,7,na.pad=TRUE,align="center")
rollmeandf <- df %>% group_by(id,name,loc) %>% arrange(id,name,loc) %>% mutate(funs=fnrollmean(df$count))
我得到错误:
eval(substitute(expr)、envir、enclos) 中的错误:大小不兼容 (9),需要 8(组大小)或 1
如果我只是这样做:
test2 <- df %>% mutate(funs=fnrollmean(df$count))
它有效,但通过考虑所有错误的疾病进行计算。
如果遗漏了什么或任何解决方法,请告诉我。
预期成绩:
date id name loc mean count mean
9/6/2016 kar1 AAA 100004 0 1 NA
9/8/2016 kar1 AAA 100004 0 3 NA
9/9/2016 kar1 AAA 100004 0 4 NA
9/10/2016 kar1 AAA 100004 0 5 4.8
9/11/2016 kar1 AAA 100004 0 6 6
9/12/2016 kar1 AAA 100004 0 7 NA
9/13/2016 kar1 AAA 100004 0 8 NA
9/14/2016 kar1 AAA 100004 0 9 NA
9/7/2016 blr1 BBB 100004 0 2 NA
谢谢
要使用mutate
,您必须有一个窗口函数,该函数返回与函数输入的向量相同长度的向量(或返回一个标量,该标量将被强制转换为填充了标量值的该长度的向量)。 问题是您的fnrollmean
没有,因此出现错误。 请注意,即使在使用您发布的输入数据遵循 jdobre 的评论后,相同类型的错误仍将存在,因为您的第二组(blr1, BBB, 100004)
只有1
行。 因此,将fnrollmean
修改为:
library(zoo)
fnrollmean <- function (x) {
if (length(x) < 7) {
rep(NA,length(x))
} else {
rollmean(x,7,align="center",na.pad=TRUE)
}
}
请注意,我们按照 jdobre 的注释在函数中使用x
而不是df$count
。 然后(再次遵循 jdobre 的评论,在mutate
调用fnrollmean
时使用count
而不是df$count
):
library(dplyr)
result <- df %>% group_by(id,name,loc) %>%
mutate(rollavg=fnrollmean(count))
给出:
print(result)
##Source: local data frame [9 x 7]
##Groups: id, name, loc [2]
##
## date id name loc mean count rollavg
## <fctr> <fctr> <fctr> <int> <int> <int> <dbl>
##1 9/6/2016 kar1 AAA 100004 0 1 NA
##2 9/8/2016 kar1 AAA 100004 0 3 NA
##3 9/9/2016 kar1 AAA 100004 0 4 NA
##4 9/10/2016 kar1 AAA 100004 0 5 4.857143
##5 9/11/2016 kar1 AAA 100004 0 6 6.000000
##6 9/12/2016 kar1 AAA 100004 0 7 NA
##7 9/13/2016 kar1 AAA 100004 0 8 NA
##8 9/14/2016 kar1 AAA 100004 0 9 NA
##9 9/7/2016 blr1 BBB 100004 0 2 NA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.