我想过滤所有Age为“NA”的数据。所以我使用train[train$Age != "NA",]
它总是返回完整的数据框。
[1] 891
> nrow(train)
[1] 891
> nrow(train[train$Age == "NA",])
[1] 177
> nrow(train[train$Age != "NA",])
[1] 891
我正在学习R而且我在某一点上受到了打击。我知道它是如此基本,但我无法自己解决这个问题或谷歌。
数据集样本
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket
1 1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171
2 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599
3 3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282
4 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803
5 5 0 3 Allen, Mr. William Henry male 35 0 0 373450
6 6 0 3 Moran, Mr. James male NA 0 0 330877
答案 0 :(得分:3)
此示例可能会有所帮助,向您展示针对"NA"
(有效字符串)的测试如何生成实际的NA
(缺失)值,这会填满您选择的行。
train <- data.frame(id=1:5, Age=c(1:3,NA,5))
train
# id Age
#1 1 1
#2 2 2
#3 3 3
#4 4 NA
#5 5 5
train$Age=="NA"
#[1] FALSE FALSE FALSE NA FALSE
train[train$Age=="NA",]
# id Age
#NA NA NA
train$Age!="NA"
#TRUE TRUE TRUE NA TRUE
train[train$Age!="NA",]
# id Age
#1 1 1
#2 2 2
#3 3 3
#NA NA NA
#5 5 5
您实际上想要使用is.na
进行测试:
is.na(train$Age)
#[1] FALSE FALSE FALSE TRUE FALSE
!is.na(train$Age)
#[1] TRUE TRUE TRUE FALSE TRUE
train[!is.na(train$Age),]
# id Age
#1 1 1
#2 2 2
#3 3 3
#5 5 5
答案 1 :(得分:1)
您的错误是"NA"
是一个字符,而不是NA
符号。可以测试向量的某些组件是NA
:is.na
。你可以看到这个例子的不同之处:
x = c("NA", NA)
x == NA
# [1] NA NA
x == "NA"
# [1] TRUE NA
is.na(x)
# [1] FALSE TRUE
所以,试试:
train[!is.na(train$Age), ]