如果element为x且前一个元素为na,则在R中替换向量中的元素

Cha*_*aff 2 r

foo <- c("a","a",NA,"b","a","a","b","b")
Run Code Online (Sandbox Code Playgroud)

如果以前的元素是NA,如何用"b"代替?

foo[foo=="b" & "previous-element"==NA] <- "whatever"
Run Code Online (Sandbox Code Playgroud)

所以预期产量将是:

result <- c("a","a",NA,"whatever","a","a","b","b")
Run Code Online (Sandbox Code Playgroud)

因此,只有NA之前的"b"(实际数据中很多)才会改变.

谢谢你的帮助!

Sve*_*ein 7

简单的解决方案:

foo[-1][foo[-1] == "b" & is.na(head(foo, -1))] <- "whatever"
Run Code Online (Sandbox Code Playgroud)

更新:

rollapply来自zoo包装的解决方案:

library(zoo)
foo[-1][rollapply(foo, 2, identical, c(NA, "b"))] <- "whatever"
Run Code Online (Sandbox Code Playgroud)