在for循环中跟踪上次有效响应的更改

时间:2019-03-03 06:29:36

标签: r

我想跟踪几次重复测量中连续判断的变化次数。完成所有回复后,这很容易

serial.tools.list_ports.comports()

vec1 <- c("plus", "plus", "minus", "plus") for (i in 2:4) { vec1[i+3] <- ifelse(vec1[i] == vec1[i-1], "no change", "change") } vec1 [1] "plus" "plus" "minus" "plus" "no change" "change" "change" 末尾的三个新条目跟踪前四个条目中从一个条目到下一个条目的更改。

但是,如果缺少条目,系统就会崩溃

vec1

我希望计算机不是从前一个条目(无论是什么)来跟踪更改,而是从前一个 valid 条目来跟踪更改。

所以我希望vec2 <- c("plus", "minus", NA, "plus") for (i in 2:4) { vec2[i+3] <- ifelse(vec2[i] == vec2[i-1], "no change", "change") } vec2 [1] "plus" "minus" NA "plus" "change" NA NA 的输出是

vec2

最后一个条目反映了第四个条目([1] "plus" "minus" NA "plus" "change" NA "change )与最后一个有效条目不同的事实,第二个条目("plus"

1 个答案:

答案 0 :(得分:1)

na.locf中有一个方便的函数zoo,该函数用最新的非NA值填充NA。

vec1 <- c("plus", "plus", "minus", "plus")
vec2 <- c("plus", "minus", NA, "plus")

lag_change <- function(x) {
  ifelse(x[-1] == zoo::na.locf(head(x, -1)), "no change", "change")
}

lag_change(vec1)
lag_change(vec2)