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
解析为 FALSE
和 TRUE | 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
有时更容易检查假的情况是否为真并否定。
我有一个数字向量,想检查是否有任何零被两个相同的数字包围,例如:
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
解析为 FALSE
和 TRUE | 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
有时更容易检查假的情况是否为真并否定。