【问题标题】:Count NAs in vector except at the beginning计算向量中的 NA,除了开头
【发布时间】:2023-04-08 23:29:01
【问题描述】:

如何计算忽略起始 NA 的 NA?

temp <- c(NA, NA, 2, 3, NA, NA, 56, NA)

此向量中的 NA 总数为 5,并且开始 NA 序列包含两个元素。因此,正确答案应该是 3。

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以从第一个非 NA 元素中子集vector,然后执行is.na 以获得逻辑向量并获得sum

    sum(is.na(temp[which(!is.na(temp))[1]:length(temp)]))
    #[1] 3
    

    或者另一种选择是根据逻辑向量的cumsum 进行子集化,然后按照上述方法进行操作

    sum(is.na(temp[cumsum(!is.na(temp))>0]))
    #[1] 3
    

    【讨论】:

      【解决方案2】:

      您可以使用rle

      with(rle(is.na(temp)), sum(lengths[-1][values[-1]]))
      #[1] 3
      

      这意味着我们首先计算每个 NA / non-NA 序列的运行长度。然后我们总结了 NA 序列的所有长度,但我们排除了第一个序列。第一个序列可以是 NA 序列,在这种情况下我们要排除它。它也可以是非 NA 序列,但在这种情况下,我们不介意是否将其删除,因为我们只想总结 NA 序列的长度。

      【讨论】:

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