我想使用 na.locf
为第一个观察值可能为零的数据帧传递非缺失值。
问题
dta <- data.frame(A = c(NA, NA, 1, 2, 4, 5, NA, NA, NA),
B = c(NA, 5, 4, 5, 8, 9, NA, NA, 100))
dta %>% mutate_all(.funs = funs(na.locf(.)))
Error in
mutate_impl(.data, dots)
: ColumnA
must be length 9 (the number of rows) or one, not 7
期望的结果
Vectorize(require)(package = c("dplyr", "zoo"),
character.only = TRUE)
dta <- data.frame(A = c(0, NA, 1, 2, 4, 5, NA, NA, NA),
B = c(0, 5, 4, 5, 8, 9, NA, NA, 100))
dta %>% mutate_all(.funs = funs(na.locf(.)))
解决方法
潜在的解决方法可能涉及用零替换第一组 NA
并向前携带零,以后可以替换,但我有兴趣将 NA 留在原处并探索是否有方便的方法使 na.locf
忽略函数未接收到非 NA 值以开始替换的情况的方法。
最佳答案
使用 na.rm = FALSE
参数注意它可以占用整个数据框——您不必单独将它应用于每一列。
na.locf(dta, na.rm = FALSE)
这给出:
A B
1 NA NA
2 NA 5
3 1 4
4 2 5
5 4 8
6 5 9
7 5 9
8 5 9
9 5 100
还有是na.locf0
:
dta %>% mutate_all(.funs = funs(na.locf0(.)))
请参阅帮助页面 ?na.locf
,其中记录了 na.rm
参数以及 na.locf0
。请注意,na.locf0 目前确实必须按列单独应用,但始终会产生相同长度的输出。
关于r - 当第一次观察是 na 时,使用 na.locf 传递最后一个值并忽略第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47206319/