我需要遍历数据框中的 ID,通过在 NA 单元格之外的最后一个填充条目和第一个填充条目之间均匀地分配空单元格来填充列中的 NA 值。
ID Value X Y
1 A x y
1 NA x y
1 NA x y
1 NA x y
1 NA x y
1 NA x y
1 B x y
2 C x y
2 NA x y
2 NA x y
2 NA x y
2 NA x y
2 D x y
应该填写到这个:
ID Value X Y
1 A x y
1 A x y
1 A x y
1 B x y
1 B x y
1 B x y
1 B x y
2 C x y
2 C x y
2 C x y
2 D x y
2 D x y
2 D x y
在观察之间有2n 个NA 值的情况下, n归因于最后一个,n归因于下一个。在2n+1 个值的情况下,n属于最后一个,n+1属于下一个。
我知道我需要使用与大型数据库配合使用na.locf
的zoo
包,用于根据最后一个非空单元格填充空值,以及fromLast
执行“下一个向后观察”的参数。但是,我无法构建一个循环来解释偶数或奇数个 NA 值,并将这两个值一起使用。
使用 tidyverse 包,
> library(tidyr)
> library(dplyr)
> df %>% dplyr::group_by(test$id) %>% fill(Value, .direction ="downup") %>% dplyr::ungroup()
这会在两个方向上填充 NA 值,但不考虑组中 NA 单元格的不同边界值。