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