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

时间:2016-09-29 17:34:29

标签: r na missing-data

我想在包含NA s的向量中找到值发生变化的行。例如,我有一个跟随向量

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

1 个答案:

答案 0 :(得分:2)

我建议将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