如何用下一个(或数据框的同一列中的上一个值)替换行中的当前值?

时间:2018-12-22 03:09:52

标签: r

如果已经问过了,请提前道歉,但我所能找到的就是如何替换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 )  

}

2 个答案:

答案 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")

希望有帮助。