在 data.frame 中过滤 NA 值
Filtering NAs values in a data.frame
我想过滤所有年龄为 "NA" 的数据。所以我使用 train[train$Age != "NA",]
它总是 returns 完整的数据框。
[1] 891
> nrow(train)
[1] 891
> nrow(train[train$Age == "NA",])
[1] 177
> nrow(train[train$Age != "NA",])
[1] 891
我正在学习 R,我有一点被打动了。我知道它很基础,但我自己或 google.
无法弄清楚
数据集样本
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
你的错误是 "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), ]
此示例可能会有所帮助,它向您展示了针对 "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
我想过滤所有年龄为 "NA" 的数据。所以我使用 train[train$Age != "NA",]
它总是 returns 完整的数据框。
[1] 891
> nrow(train)
[1] 891
> nrow(train[train$Age == "NA",])
[1] 177
> nrow(train[train$Age != "NA",])
[1] 891
我正在学习 R,我有一点被打动了。我知道它很基础,但我自己或 google.
无法弄清楚数据集样本
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
你的错误是 "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), ]
此示例可能会有所帮助,它向您展示了针对 "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