如何计算向量头中的NA?

问题描述 投票:0回答:2
x=c(NA, 2, -3, NA, -5, 5, -7, -8, -9, -10, NA, -2, 2, -14, -15, NA, -17, 2, NA, -20)

我想选择不是NA的前10个值。所以我这样做:

head(x[!is.na(x)], 10)

现在我想知道有多少NA被忽略了:

sum(is.na(head(x[is.na(x)], 10)))
# [1] 5

这是不正确的:它应该是3

r vector na
2个回答
2
投票

这应该这样做:

sum(is.na(head(x, which(cumsum(!is.na(x)) == 10))))

cumsum给出的逻辑向量的!is.na给出了第十个非NA数的索引,这是我们想要的head函数的输入(因为我们想要所有值,直到我们得到第十个非NA值)。


3
投票

我们需要实际矢量子集上的逻辑矢量而不是仅NA数据

sum(is.na(head(x, 10)))
#[1] 3

head(x[is.na(x)], 10)
#[1] NA NA NA NA NA

因为我们是NA元素的子集,所以只给出了NA

Update

根据评论中的逻辑,一种方法是

i1 <- !is.na(x)
i1[i1] <- seq_along(i1[i1])
sum(is.na(head(x, which(i1 == 10))))
© www.soinside.com 2019 - 2024. All rights reserved.