首页 > 解决方案 > R - 具有领先和滞后的逻辑陈述

问题描述

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

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 

在这种情况下,我仍然想返回 FALSE。有谁知道如何在不使用超前和滞后功能的情况下解决这个问题?

谢谢你的帮助!

标签: rlaglead

解决方案


您需要检查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

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


推荐阅读