在 R 编程中处理缺失值
顾名思义,缺失值是那些未知的元素。 NA 或 NaN 是保留字,表示 R 编程语言中 q 个未定义的算术运算的缺失值。
R – 处理缺失值
缺失的价值观在生活中很实用。例如,电子表格中的某些单元格是空的。如果尝试了不合理或不可能的算术运算,则会出现 NA。
在 R 中处理缺失值
R 中的缺失值是通过使用一些预定义的函数来处理的:
is.na() 查找缺失值的函数:
此函数返回一个逻辑向量,指示所有存在的 NA 值。它返回一个布尔值。如果向量中存在 NA,则返回 TRUE,否则返回 FALSE。
R
x<- c(NA, 3, 4, NA, NA, NA)
is.na(x)
R
x<- c(NA, 3, 4, NA, NA, 0 / 0, 0 / 0)
is.nan(x)
R
x<- c(NA, 3, 4, NA, NA, NA)
x
R
x <- c(1, 2, NA, 3, NA, 4)
d <- is.na(x)
x[! d]
R
x <- c(1, 2, 0 / 0, 3, NA, 4, 0 / 0)
x
x[! is.na(x)]
R
# Creating a data frame
df <- data.frame (c1 = 1:8,
c2 = factor (c("B", "A", "B", "C",
"A", "C", "B", "A")))
# Filling some NA in data frame
df[4, 1] <- df[6, 2] <- NA
# Printing all the levels(NA is not considered one)
levels(df$c2)
# fails if NA is encountered
na.fail (df)
# excludes every row containing even one NA
na.exclude (a)
输出:
[1] TRUE FALSE FALSE TRUE TRUE TRUE
is.nan() 查找缺失值的函数:
此函数返回一个逻辑向量,指示所有存在的 NaN 值。它返回一个布尔值。如果向量中存在 NaN,则返回 TRUE,否则返回 FALSE。
R
x<- c(NA, 3, 4, NA, NA, 0 / 0, 0 / 0)
is.nan(x)
输出:
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
缺失值的属性:
- 对于测试不适用的对象,请使用 is.na()
- 要测试 NaN 对象,请使用 is.nan()
- NA 属于某些类别。因此整数类具有整数类型 NA,字符类具有字符类型 NA,等等。
- NaN 值计入 NA,但反之无效。
也可以创建具有一个或多个 NA 的向量。
R
x<- c(NA, 3, 4, NA, NA, NA)
x
输出:
[1] NA 3 4 NA NA NA
删除 NA 或 NaN 值
有两种方法可以去除缺失值:
提取除 NA 或 NaN 值之外的值:
示例 1:
R
x <- c(1, 2, NA, 3, NA, 4)
d <- is.na(x)
x[! d]
输出:
[1] 1 2 3 4
示例 2:
R
x <- c(1, 2, 0 / 0, 3, NA, 4, 0 / 0)
x
x[! is.na(x)]
输出:
[1] 1 2 NaN 3 NA 4 NaN
[1] 1 2 3 4
也可以使用名为complete.cases()的函数。此函数也适用于数据帧。
缺失值过滤函数
R 语言中的建模函数承认一个na.action参数,该参数向函数提供有关其响应的指令,如果 NA 妨碍它。
因此,通过这种方式,函数调用了缺失值过滤器函数之一。缺失值过滤器函数会更改数据集,并且在新数据集中,NAs 的值已更改。默认的缺失值过滤函数是na.omit 。它省略了包含甚至一个 NA 的每一行。其他一些缺失值过滤器函数是:
- na.omit – 省略包含甚至一个 NA 的每一行
- na.fail - 如果遇到 NA,则停止并且不继续
- na.exclude - 排除包含甚至一个 NA 的每一行,但保留其原始位置的记录
- na.pass - 它只是忽略 NA 并通过它
R
# Creating a data frame
df <- data.frame (c1 = 1:8,
c2 = factor (c("B", "A", "B", "C",
"A", "C", "B", "A")))
# Filling some NA in data frame
df[4, 1] <- df[6, 2] <- NA
# Printing all the levels(NA is not considered one)
levels(df$c2)
# fails if NA is encountered
na.fail (df)
# excludes every row containing even one NA
na.exclude (a)
输出:
[1] "A" "B" "C"
Error in na.fail.default(df) : missing values in object
Calls: na.fail -> na.fail.default
Execution halted
特别案例
有两种特殊情况,NA 以不同方式表示或表示:
- 因子向量– 是缺失值的因子向量中显示的符号。
- NaN – 这只是 NA 的一个特例。当算术运算产生的结果不是数字时显示。例如,将零除以零会产生 NaN。