📜  在 R 编程中处理缺失值

📅  最后修改于: 2022-05-13 01:55:29.575000             🧑  作者: Mango

在 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。