na.locf 使用 dplyr 中的 group_by

2024-01-10

我正在尝试使用na.locf从包装中zoo使用分组数据dplyr。我在这个问题上使用第一个解决方案:使用 dplyr 窗口函数生成尾随值(填写 NA 值) https://stackoverflow.com/questions/23340150/using-dplyr-window-functions-to-make-trailing-values-fill-in-na-values

library(dplyr);library(zoo)
df1 <- data.frame(id=rep(c("A","B"),each=3),problem=c(1,NA,2,NA,NA,NA),ok=c(NA,3,4,5,6,NA))
df1
  id problem ok
1  A       1 NA
2  A      NA  3
3  A       2  4
4  B      NA  5
5  B      NA  6
6  B      NA NA

当组内所有数据均为 NA 时,就会出现问题。正如您在问题栏中看到的,na.locfid=B 的数据来自另一组:id=A 的最后一个数据。

df1 %>% group_by(id) %>% na.locf()

Source: local data frame [6 x 3]
Groups: id [2]

     id problem    ok
  <chr>   <chr> <chr>
1     A       1  <NA>
2     A       1     3
3     A       2     4
4     B       2     5 #problem col is wrong
5     B       2     6 #problem col is wrong
6     B       2     6 #problem col is wrong

这是我的预期结果。 id=B 的数据与 id=A 中的数据无关

     id problem    ok
  <chr>   <chr> <chr>
1     A       1  <NA>
2     A       1     3
3     A       2     4
4     B       NA     5
5     B       NA     6
6     B       NA     6

我们需要使用na.locf within mutate_all as na.locf可以直接应用于数据集。尽管它是按“id”分组的,但应用na.locf通过应用于完整数据集不遵循任何分组行为

df1 %>%
     group_by(id) %>%
     mutate_all(funs(na.locf(., na.rm = FALSE)))
#    id problem    ok
#  <fctr>   <dbl> <dbl>
#1      A       1    NA
#2      A       1     3
#3      A       2     4
#4      B      NA     5
#5      B      NA     6
#6      B      NA     6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

na.locf 使用 dplyr 中的 group_by 的相关文章

随机推荐