【发布时间】:2023-04-08 23:29:01
【问题描述】:
如何计算忽略起始 NA 的 NA?
temp <- c(NA, NA, 2, 3, NA, NA, 56, NA)
此向量中的 NA 总数为 5,并且开始 NA 序列包含两个元素。因此,正确答案应该是 3。
【问题讨论】:
标签: r
如何计算忽略起始 NA 的 NA?
temp <- c(NA, NA, 2, 3, NA, NA, 56, NA)
此向量中的 NA 总数为 5,并且开始 NA 序列包含两个元素。因此,正确答案应该是 3。
【问题讨论】:
标签: r
我们可以从第一个非 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
【讨论】:
您可以使用rle:
with(rle(is.na(temp)), sum(lengths[-1][values[-1]]))
#[1] 3
这意味着我们首先计算每个 NA / non-NA 序列的运行长度。然后我们总结了 NA 序列的所有长度,但我们排除了第一个序列。第一个序列可以是 NA 序列,在这种情况下我们要排除它。它也可以是非 NA 序列,但在这种情况下,我们不介意是否将其删除,因为我们只想总结 NA 序列的长度。
【讨论】: