我遇到了这个非常奇怪的问题:
说我做了以下数据框
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?
答案 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列。