在 R 中,清除包含 NA(缺失值)的数据可以通过多种方式实现,具体取决于你希望如何处理这些缺失值。以下是几种常见的方法,包括删除包含 NA 的行、删除包含 NA 的列,或者用特定值填充 NA。
1. 删除包含 NA 的行
 
如果你希望删除数据框中包含任何 NA 值的行,可以使用 na.omit() 函数或 complete.cases() 函数。
使用 na.omit()
 
na.omit() 会自动删除包含任何 NA 的行。
# 示例数据框
data <- data.frame(Name = c("Alice", "Bob", "Charlie", "David"),Age = c(15, NA, 10, 30),Score = c(85, 90, NA, 88)
)# 删除包含 NA 的行
data_clean <- na.omit(data)print(data_clean) 
输出:
    Name Age Score
4  David  30    88 
使用 complete.cases()
 
complete.cases() 会返回一个逻辑向量,指示哪些行没有 NA 值。
# 删除包含 NA 的行
data_clean <- data[complete.cases(data), ]print(data_clean) 
输出:
    Name Age Score
4  David  30    88 
2. 删除包含 NA 的列
 
如果你希望删除数据框中包含任何 NA 值的列,可以使用 apply() 函数结合 anyNA() 函数。
# 示例数据框
data <- data.frame(Name = c("Alice", "Bob", "Charlie", "David"),Age = c(15, NA, 10, 30),Score = c(85, 90, NA, 88),Gender = c("Female", "Male", "Male", "Male")
)# 删除包含 NA 的列
data_clean <- data[, !apply(data, 2, anyNA)]print(data_clean) 
输出:
     Gender
1   Female
2     Male
3     Male
4     Male 
3. 按条件删除行或列
如果你只想删除特定列中包含 NA 的行,可以指定列名。
删除特定列中包含 NA 的行
 
# 删除 Age 列中包含 NA 的行
data_clean <- data[!is.na(data$Age), ]print(data_clean) 
输出:
     Name Age Score Gender
1   Alice  15    85 Female
3 Charlie  10    NA   Male
4   David  30    88   Male 
删除特定列中包含 NA 的列
 
# 删除 Score 列中包含 NA 的列
data_clean <- data[, !anyNA(data$Score)]print(data_clean) 
输出:
     Name Age Gender
1   Alice  15 Female
2     Bob  NA   Male
3 Charlie  10   Male
4   David  30   Male 
4. 填充 NA 值
 
如果你不想删除 NA 值,而是希望用特定值填充它们,可以使用 ifelse() 函数或 dplyr 包中的 replace_na() 函数。
使用 ifelse() 填充 NA
 
# 用 0 填充 NA
data$Age <- ifelse(is.na(data$Age), 0, data$Age)
data$Score <- ifelse(is.na(data$Score), 0, data$Score)print(data) 
输出:
     Name Age Score Gender
1   Alice  15    85 Female
2     Bob   0    90   Male
3 Charlie  10     0   Male
4   David  30    88   Male 
使用 dplyr::replace_na()
 
library(dplyr)
data <- data %>%mutate(Age = replace_na(Age, 0),Score = replace_na(Score, 0))print(data) 
输出:
     Name Age Score Gender
1   Alice  15    85 Female
2     Bob   0    90   Male
3 Charlie  10     0   Male
4   David  30    88   Male 
5. 总结
-  
删除包含
NA的行:使用na.omit()或complete.cases()。 -  
删除包含
NA的列:使用apply()结合anyNA()。 -  
按条件删除行或列:指定列名并使用逻辑条件。
 -  
填充
NA值:使用ifelse()或dplyr::replace_na()。