选择连续值发生变化而忽略 NA 的行

Selecting rows where consecutive values change while ignoring NAs

我想在包含 NA 的向量中查找值发生变化的行。例如,我有以下向量

x = c(1, 2, 6, 3, 3, 9, 3, 5, 5, 4, 4)

我可以使用此代码 which(x[-1] != x[-length(x)]) + 1,当值发生变化时它会给我行号:2, 3, 4, 6, 7, 8, 10 .

如果我替换 x[x>4] <- NA 并重新运行相同的代码,输出将仅为行 2。但我想将所有 NA 视为更改 除了 如果先前的值也是 NA 并将之后的值作为更改处理。

我想要的 x = c(1, 2, NA, 3, 3, NA, 3, NA, NA, 4, 4) 输出将是以下行号的输出:2, 3, 4, 6, 7, 8, 10

我建议将 NA 更改为其他缺失值的常规表示形式,例如 -9999。在此之后,您可以使用您的方法 which(x[-1] != x[-length(x)]) + 1,或尝试使用基础 R.

中的 rle 函数
# Sample data
x = c(1, 2, NA, 3, 3, NA, 3, NA, NA, 4, 4)

# Replace missing values with -9999
x[is.na(x)] <- -9999

# Calculate position of non-equal consecutive values
cumsum(rle(x)$length) + 1

# NOTE: you will need to remove last element of the output