Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R dplyr-使用按列分组的rollmean_R - Fatal编程技术网

R dplyr-使用按列分组的rollmean

R dplyr-使用按列分组的rollmean,r,R,我有一个数据框,如下所示: (如果数据不符合格式,则查找图像) 我试图计算((7天滚动平均值))3天滚动平均值(前3天和后3天) 基于id、名称、loc的计数字段,但结果不符合预期 查找以下代码: fnrollmean <- function(x) rollmean(df$count,7,na.pad=TRUE,align="center") rollmeandf <- df %>% group_by(id,name,loc) %>% arrange(id,name,l

我有一个数据框,如下所示:

(如果数据不符合格式,则查找图像)

我试图计算((7天滚动平均值))3天滚动平均值(前3天和后3天) 基于id、名称、loc的计数字段,但结果不符合预期

查找以下代码:

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))


感谢要使用
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)
  }
}
给出:

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
打印(结果)
##来源:本地数据帧[9 x 7]
##组:id、名称、位置[2]
##
##日期id名称loc平均计数rollavg
##               
##2016年9月6日kar1 AAA 100004 01 NA
##2016年9月8日kar1 AAA 100004 03 NA
##2016年9月3日kar1 AAA 100004 0 4北美
##4.9/10/2016 kar1 AAA 100004 0 5 4.857143
##5 2016年9月11日kar1 AAA 100004 06.000000
##2016年9月12日kar1 AAA 100004 0 7 NA
##2016年9月13日kar1 AAA 100004 08 NA
##2016年9月14日8日kar1 AAA 100004 0 9 NA
##2016年9月7日blr1 BBB 100004 0 2北美

要使用
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)
  }
}
给出:

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
打印(结果)
##来源:本地数据帧[9 x 7]
##组:id、名称、位置[2]
##
##日期id名称loc平均计数rollavg
##               
##2016年9月6日kar1 AAA 100004 01 NA
##2016年9月8日kar1 AAA 100004 03 NA
##2016年9月3日kar1 AAA 100004 0 4北美
##4.9/10/2016 kar1 AAA 100004 0 5 4.857143
##5 2016年9月11日kar1 AAA 100004 06.000000
##2016年9月12日kar1 AAA 100004 0 7 NA
##2016年9月13日kar1 AAA 100004 08 NA
##2016年9月14日8日kar1 AAA 100004 0 9 NA
##2016年9月7日blr1 BBB 100004 0 2北美

您的
fnrollmean
函数需要使用传递给它的'x'参数(而不是
df$count
)。在调用
mutate
时,应该使用
count
,而不是
df$count
。但即使做出这些改变也会产生错误。我对zoo软件包不太熟悉,无法进一步评论。您的
fnrollmean
函数需要使用传入它的'x'参数(而不是
df$count
)。在调用
mutate
时,应该使用
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