选择连续值发生变化而忽略 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
我想在包含 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