group_by function未与另一个group_by一起工作

group_by function未与另一个group_by一起工作,r,group-by,dplyr,R,Group By,Dplyr,我有以下格式的数据集: STATION CODE DATE HOUR hr_rain SHIVAMOGGA 163 06/09/18 00 1.0 SHIVAMOGGA 163 06/09/18 04 1.0 SHIVAMOGGA 163 06/09/18 05 NA SHIVAMOGGA 163 06/09/18 06 1.5 SHIVAMOGGA 163 06/09/18 07 2.5 SHIVAMOGGA 16

我有以下格式的数据集:

STATION     CODE  DATE     HOUR hr_rain
SHIVAMOGGA  163 06/09/18    00   1.0
SHIVAMOGGA  163 06/09/18    04   1.0
SHIVAMOGGA  163 06/09/18    05   NA
SHIVAMOGGA  163 06/09/18    06   1.5
SHIVAMOGGA  163 06/09/18    07   2.5
SHIVAMOGGA  163 06/09/18    08   NA
SHIVAMOGGA  163 06/09/18    09   0.0
SHIVAMOGGA  163 06/09/18    10   0.5
SHIVAMOGGA  163 06/09/18    11   0.5
SHIVAMOGGA  163 06/09/18    12   NA
SHIVAMOGGA  163 06/09/18    13   NA
SHIVAMOGGA  163 06/09/18    14   0.5
SHIVAMOGGA  163 06/09/18    15   0.5
SHIVAMOGGA  163 06/09/18    16   0.5
SHIVAMOGGA  163 06/09/18    17   0.5
SHIVAMOGGA  163 06/09/18    18   0.5
SHIVAMOGGA  163 06/09/18    19   0.5
SHIVAMOGGA  163 06/10/19    03   0.5
SHIVAMOGGA  163 06/10/19    05   NA
SHIVAMOGGA  163 06/10/19    06   NA
SHIVAMOGGA  163 06/10/19    07   NA
SHIVAMOGGA  163 06/10/19    08   0.5
SHIVAMOGGA  163 06/10/19    09   0.0
SHIVAMOGGA  163 06/10/19    10   0.0
此处参数“降雨量”为小时累积格式。我对小时降雨量很感兴趣。测量每天在09小时开始&有时观测值缺失,因此我尝试通过分组09小时来填充NA值(3个或更多连续NA保持不变,替换数量少于2个的连续NA,8小时的NA给出了以前的值)

df1 <- df %>% 
  group_by(STATION, CODE, gr = cumsum(HOUR == '09')) %>% 
  mutate(hr_rain = na.approx(hr_Rain, rule = 2, maxgap = 2, na.rm = FALSE))
但它不起作用。它创建第一个组,然后第二个组继续,直到数据帧结束。结果是:

STATION     CODE  DATE     HOUR hr_rain  NUM_NA  gp  grp  RAINFALL
SHIVAMOGGA  163 06/09/18    00   1.0       2      0   0     1
SHIVAMOGGA  163 06/09/18    04   1.0       2      0   0     0
SHIVAMOGGA  163 06/09/18    05   1.25      1      0   0     0.25
SHIVAMOGGA  163 06/09/18    06   1.5       1      0   0     0.25
SHIVAMOGGA  163 06/09/18    07   2.5       1      0   0     1
SHIVAMOGGA  163 06/09/18    08   2.5       1      0   0     0
SHIVAMOGGA  163 06/09/18    09   0.0       1      1   1     -2.5
SHIVAMOGGA  163 06/09/18    10   0.5       2      1   1     0.5
SHIVAMOGGA  163 06/09/18    11   0.5       2      1   1     0
SHIVAMOGGA  163 06/09/18    12   0.5       2      1   1     0
SHIVAMOGGA  163 06/09/18    13   0.5       2      1   1     0
SHIVAMOGGA  163 06/09/18    14   0.5       7      1   1     0
SHIVAMOGGA  163 06/09/18    15   0.5       7      1   1     0
SHIVAMOGGA  163 06/09/18    16   0.5       7      1   1     0
SHIVAMOGGA  163 06/09/18    17   0.5       7      1   1     0
SHIVAMOGGA  163 06/09/18    18   0.5       7      1   1     0
SHIVAMOGGA  163 06/09/18    19   0.5       7      1   1     0
SHIVAMOGGA  163 06/10/19    03   0.5       7      1   1     0
SHIVAMOGGA  163 06/10/19    05   NA        3      1   1     NA
SHIVAMOGGA  163 06/10/19    06   NA        3      1   1     NA
SHIVAMOGGA  163 06/10/19    07   NA        3      1   1     NA
SHIVAMOGGA  163 06/10/19    08   0.5       1      1   1     0.5
SHIVAMOGGA  163 06/10/19    09   0.0       2      2   1     -0.5
SHIVAMOGGA  163 06/10/19    10   0.0       2      2   1     0
在这9个小时里,我得到了负值,我想从hr_rain的值开始(这就是为什么我试图在09小时之前创建另一个分组)。
提前感谢您的帮助

由于两组数据相同,无需进行不同的计算,因此您可以将它们组合起来,一起计算
hr\u rain
rain

library(dplyr)

df %>% 
  group_by(STATION, CODE, gr = cumsum(HOUR == '09')) %>% 
  mutate(hr_rain = zoo::na.approx(hr_rain, rule = 2, maxgap = 2, na.rm = FALSE), 
         RAINFALL = hr_rain - lag(hr_rain, default = 0)) 
数据

df <- structure(list(STATION = c("SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA"), CODE = c(163, 163, 163, 163, 163, 163, 163, 163, 
163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 
163, 163, 163), DATE = c("06/09/18", "06/09/18", "06/09/18", 
"06/09/18", "06/09/18", "06/09/18", "06/09/18", "06/09/18", "06/09/18", 
"06/09/18", "06/09/18", "06/09/18", "06/09/18", "06/09/18", "06/09/18", 
"06/09/18", "06/09/18", "06/10/19", "06/10/19", "06/10/19", "06/10/19", 
"06/10/19", "06/10/19", "06/10/19"), HOUR = c("00", "04", "05", 
"06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", 
"17", "18", "19", "03", "05", "06", "07", "08", "09", "10"), 
hr_rain = c(1, 1, NA, 1.5, 2.5, NA, 0, 0.5, 0.5, NA, NA, 
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, NA, NA, NA, 0.5, 0, 0)), row.names = c(NA, 
-24L), class = "data.frame")

df在再次分组之前,您可能需要
ungroup()
?@neilfws with
ungroup()
它正在创建渴望的分组,但它会不断地获取两个字段的差异。它应该从09小时开始重新启动,但没有发生。如果分组变量创建正确,但组中的
mutate
似乎不起作用,那么您可能在
dplyr
之后加载了
plyr
,忽略了警告,并且在需要时无意中使用了
plyr::mutate
,也许可以尝试指定
dplyr::mutate
@Gregor,因为我已经先加载了
plyr
,然后加载了
dplyr
,但它没有按预期工作。它仍然在做9小时和8小时的减法,这会导致9小时的负值。此外,我做了第一次分组,这样就不用为8小时的NA指定插值,而是在8小时的NA中使用以前可用的(7小时)值,但它不是这样工作的
na.approx()
也在插值8小时。@Ajay它给我9小时的所有值0,所有组在9小时时也在
gr
中更改。你能核对一下我公布的数据吗?你们的数据和那个不一样吗?用你们的数据,我得到了相同的输出。它给出了9小时和8小时的减法结果<代码>车站代码日期小时小时降雨量gr降雨量5 SHIVAMOGGA 163 06/09/18 07 2.5 0 1 6 SHIVAMOGGA 163 06/09/18 08 1.25 0-1.25 7 SHIVAMOGGA 163 06/09/18 09 0 1-1.25 8 SHIVAMOGGA 163 06/09/18 10 0.5 1 0.5 9 SHIVAMOGGA 163 06/09/18 110.5 1 0 10 SHIVAMOGGA 163 06/09/18 12 0.5 1 0#…还有14行
@Ajay是的,在这种情况下,如Gregor所述,存在冲突,请使用
dplyr::mutate
而不仅仅是
mutate
df <- structure(list(STATION = c("SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", "SHIVAMOGGA", 
"SHIVAMOGGA"), CODE = c(163, 163, 163, 163, 163, 163, 163, 163, 
163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 
163, 163, 163), DATE = c("06/09/18", "06/09/18", "06/09/18", 
"06/09/18", "06/09/18", "06/09/18", "06/09/18", "06/09/18", "06/09/18", 
"06/09/18", "06/09/18", "06/09/18", "06/09/18", "06/09/18", "06/09/18", 
"06/09/18", "06/09/18", "06/10/19", "06/10/19", "06/10/19", "06/10/19", 
"06/10/19", "06/10/19", "06/10/19"), HOUR = c("00", "04", "05", 
"06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", 
"17", "18", "19", "03", "05", "06", "07", "08", "09", "10"), 
hr_rain = c(1, 1, NA, 1.5, 2.5, NA, 0, 0.5, 0.5, NA, NA, 
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, NA, NA, NA, 0.5, 0, 0)), row.names = c(NA, 
-24L), class = "data.frame")