Menu
CoddyTech

处理缺失数据

Coddy R 中的数据处理 课程的第 11 课,共 14 课。

缺失值通常表示为 <strong>NA</strong>(不可用)。让我们来了解识别、删除和填补缺失值的方法。

识别缺失数据

在 R 中检查缺失值,可以使用以下函数:

# 检查值是否为 NA
is.na(x)

# 统计向量中 NA 的个数
sum(is.na(x))

# 找出数据框中含有 NA 的行
complete.cases(df)

删除缺失数据

你可以使用以下方法删除含有缺失值的行:

# 删除包含任何 NA 的行
df_clean <- na.omit(df)

# 使用 dplyr 删除指定列中包含 NA 的行
library(dplyr)
df_clean <- df %>% filter(!is.na(column_name))

填补缺失数据

填补是指用估算值替换缺失值。以下是一些常见的填补方法:


# 均值填补
df$column[is.na(df$column)] <- mean(df$column, na.rm = TRUE)

# 中位数填补
df$column[is.na(df$column)] <- median(df$column, na.rm = TRUE)

# 分类数据的众数填补
mode_value <- names(sort(table(df$category), decreasing = TRUE))[1]
df$category[is.na(df$category)] <- mode_value
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

中等

创建一个函数,用于处理包含患者及其医学检测结果信息的数据集。该函数应执行以下操作:

  1. 将输入字符串转换为数据框
  2. 识别并统计每列中的缺失值数量
  3. 删除“age”或“test_result”列中存在缺失值的行
  4. 使用中位数填补“blood_pressure”列中的缺失值
  5. 根据“test_result”创建一个新列“status”:
    • 如果 test_result 缺失,将 status 设为 "Unknown"
    • 如果 test_result 小于 50,将 status 设为 "Normal"
    • 如果 test_result 大于或等于 50,将 status 设为 "Elevated"
  6. 打印以下信息:
    • 处理前每列中的缺失值数量
    • 删除的行数
    • 用于填补缺失值的血压中位数
    • 处理后的数据框

亲手试试

# 读取输入
con <- file("stdin", "r")
input_string <- suppressWarnings(readLines(con))

# 将输入字符串转换为数据框
data <- read.csv(text = input_string, stringsAsFactors = FALSE)

# TODO: 在下方编写你的代码
# 1. 找出并统计缺失值
# 2. 删除 'age' 或 'test_result' 中有缺失值的行
# 3. 填补 'blood_pressure' 中的缺失值
# 4. 创建 'status' 列
# 5. 打印所需信息

# 输出占位符
cat("Missing values in each column before processing:\n")
print(missing_counts)
cat("\nNumber of rows removed:\n")
print(rows_removed)
cat("\nMedian blood pressure used for imputation:\n")
print(median_bp)
cat("\nProcessed data:\n")
print(data_clean)

R 中的数据处理中的所有课

自己练习: R 在线编译器