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
答案 0 :(得分:3)
我们需要在实际向量的子集上而不是仅在NA数据上使用逻辑向量
sum(is.na(head(x, 10)))
#[1] 3
head(x[is.na(x)], 10)
#[1] NA NA NA NA NA
在给NA元素设置子元素时,仅给出NAs
根据注释中的逻辑,一种方法是
i1 <- !is.na(x)
i1[i1] <- seq_along(i1[i1])
sum(is.na(head(x, which(i1 == 10))))
答案 1 :(得分:2)
这应该做到:
sum(is.na(head(x, which(cumsum(!is.na(x)) == 10))))
由cumsum
给出的逻辑向量的!is.na
给我们第十个非NA
数字的索引,这是我们想要的head
函数的输入(因为我们需要所有的值,直到达到第十个非NA
的值)。