我想在包含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
答案 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