我正在尝试使用na.locf
包来zoo
使用dplyr
分组数据。我在这个问题上使用了第一个解决方案: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时,会出现问题。正如您在问题列中看到的那样,id = B的na.locf
数据来自另一个组: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
答案 0 :(得分:10)
我们需要在na.locf
中使用mutate_all
,因为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