簡體   English   中英

R dplyr - rollmean 使用按列分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM