r - 当第一次观察是 na 时,使用 na.locf 传递最后一个值并忽略第一行

标签 r dplyr zoo

我想使用 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) : Column A 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/

相关文章:

r - 根据 R 中的字符串向量拆分字符串

r - 我可以生成一个包含两个向量的表吗?

r - `sapply` 对于 "zoo"对象成功,但对于 "xts"对象则失败,为什么?

r - 从 R 中多个数据框中的列创建唯一值列表

r - 如何防止数据框列被归类为字符而不是数字

r - 从 map() 调用加入 data.frames 列表

r - "Error in UseMethod("mutate ") : no applicable method for ' mutate ' applied to an object of class "function"尝试分隔列时

R expss use_labels 和 dplyr 逻辑

r - na.locf 使用 dplyr 中的 group_by

r - R:合并两个不规则的时间序列