如果已经问过了,请提前道歉,但我所能找到的就是如何替换NA。从不匹配我在这里面临的配置。在这种情况下,我只想用下一行的值替换0。一个有关如何映射上一行的示例也会有所帮助(尽管我认为它应该非常接近映射下一行)。
下面是一段有效的代码,但是将其应用于大型数据框时,运行速度非常慢。我以为必须使用lapply()提供更好的解决方案。请注意,与此处给出的示例不同,实际数据帧没有要“分组”的内容,因此dplyr可能不是一个选择。再次谢谢你
iris$ind <- seq_along(iris$Sepal.Length)
iris$ind <- ifelse(iris$ind %% 2 == 0, 0, iris$ind)
for(i in seq_along(iris$ind)){
ifelse(iris$ind[i] == 0,
iris$ind[i] <- iris$ind[i + 1], iris$ind )
}
答案 0 :(得分:0)
您可以尝试使用lead
软件包中的dplyr
:
iris$ind <- ifelse(iris$ind == 0,
lead(iris$ind, order_by=iris$Sepal.Length),
iris$ind)
答案 1 :(得分:0)
我猜您想使用fill
中的dplyr
,但是它仅适用于用上一个或下一个值填充NA
值。因此,为什么不将0
的值替换为NA
的值,然后再使用fill
。您可以使用mutate
中的dplyr
来做到这一点,
iris <- iris %>% mutate(ind = ifelse(ind == 0, NA, ind)) %>% fill(ind)
.direction
的默认fill
是"down"
,这意味着将0
替换为其先前的值。要将0
替换为下一个值,您需要将.direction
更改为"up"
,如下所示:
iris <- iris %>% mutate(ind = ifelse(ind == 0, NA, ind)) %>% fill(ind, .direction="up")
希望有帮助。