R - 具有超前和滞后的逻辑语句

R - logical statement with leads and lags

我有一个数字向量,想检查是否有任何零被两个相同的数字包围,例如:

x <- c(3,0,3,4,5,2,0,1,3)

any(x == 0 & lag(x) == lead(x))
TRUE 

但是问题是,如果向量以 0 开头或结尾,我将得到 NA,因为滞后或超前都将为 NA。

x <- c(0,3,4,5,2,0,1,3)

any(x == 0 & lag(x) == lead(x))
NA 

在这种情况下我还是想return一个FALSE。有谁知道如何在不使用超前和滞后函数的情况下解决这个问题?

感谢您的帮助!

您需要检查 is.na,您可以利用 NA & FALSE 解析为 FALSETRUE | NA 解析为 TRUE 的事实。

试试这个:

any(!(is.na(lead(x)) | is.na(lag(x)) | lead(x) != lag(x) | x != 0))

这会检查是否所有你想要的假情况都为真,然后否定整个表达式。

x <- c(3,0,3,4,5,2,0,1,3)
any(!(is.na(lead(x)) | is.na(lag(x)) | lead(x) != lag(x) | x != 0))
[1] TRUE

x <- c(0,3,4,5,2,0,1,3)
any(!(is.na(lead(x)) | is.na(lag(x)) | lead(x) != lag(x) | x != 0))
[1] FALSE

有时更容易检查假的情况是否为真并否定。