用NA替换某些值后,向量长度不正确

时间:2015-05-31 02:23:16

标签: r

我遇到了这个非常奇怪的问题:

说我做了以下数据框

test$V3[test$V3==5]<-NA
#      V1 V2 V3
# 1    2  4 NA
# 2    2  4  6

然后我将第V3列第1行中的数字5替换为NA:

length(test$V3[test$V3==6])
# 2

奇怪的是,现在值为6的向量长度不正确:

{{1}}

为什么输出是2而不是1?

2 个答案:

答案 0 :(得分:2)

你可以拆开表达式来看看发生了什么:

test$V3==6
# [1]   NA TRUE

如您所见,缺少元素的值为NA。在对NA进行子集化时,这会导致test$V3

test$V3[test$V3==6]
# [1] NA  6

由于这是一个长度为2的向量,这就解释了为什么你的代码返回2。

听起来你实际上想要计算等于6的元素数量,忽略缺失值。你可以这样做:

sum(test$V3 == 6, na.rm=TRUE)
# [1] 1

sum(!is.na(test$V3) & test$V3 == 6)
# [1] 1

答案 1 :(得分:1)

除了目前为止提供的两种方法,我还会提供更多。第一个为你做NA删除,当我不希望所有垃圾行“[”与NA选择一起拖动时,我发现它在data.frames的选择行中很有用:

> length(which(test$V3 == 6))
[1] 1
> length(subset(test, V3 == 6, V3))
[1] 1

带有两个“V3”令牌的第二个可能看起来有点多余,直到你意识到如果没有第二个“V3”,你将在一行数据帧中获得3列。