【问题标题】:R - logical statement with leads and lagsR - 具有领先和滞后的逻辑陈述
【发布时间】:2021-06-04 04:18:50
【问题描述】:

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

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。有谁知道如何在不使用超前和滞后功能的情况下解决这个问题?

感谢您的帮助!

【问题讨论】:

    标签: r lag lead


    【解决方案1】:

    您需要检查is.na,您可以利用NA &amp; 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多