【发布时间】:2021-12-03 01:52:17
【问题描述】:
我需要循环遍历数据框中的 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 属于下一个。
我知道我需要使用zoo 包中的na.locf,它适用于大型数据库,用于根据最后一个非空单元格填充空值,以及fromLast 参数来执行“下一步”观察倒退”。但是,我不能构造一个循环来解释偶数或奇数个 NA 值,并将这两个值一起使用。
使用 tidyverse 包,
> library(tidyr)
> library(dplyr)
> df %>% dplyr::group_by(test$id) %>% fill(Value, .direction ="downup") %>% dplyr::ungroup()
这会在两个方向上填充 NA 值,但不考虑组中 NA 单元格的不同边框值。
【问题讨论】:
-
如果两个非NA之间有1个NA,你是否从前一个元素中取出非NA
-
不,对于下一个(将 n 和 n+1 用于 NA 值的前半部分和后半部分,因此 n=0)