如何使用 R 语言进行数据清洗和预处理?

14 阅读2分钟

一、先准备工具(必须装)

数据清洗最强包:dplyr + tidyr

# 安装(一次即可)
install.packages("tidyverse")  # 包含 dplyr, tidyr 等全套工具

# 加载(每次都要运行)
library(tidyverse)

二、数据清洗万能流程(7步)

不管什么数据,按这7步走,一定能洗干净:

  1. 读取数据
  2. 查看数据结构
  3. 处理缺失值
  4. 处理重复值
  5. 筛选有用行/列
  6. 修改变量类型、重命名
  7. 数据格式转换(宽表 ↔ 长表)

三、每一步代码模板(直接复制用)

我用内置数据 iris 演示,你把它换成自己数据即可。

1. 读取数据

# 读取 CSV
df <- read.csv("你的数据.csv", stringsAsFactors = FALSE)

# 读取 Excel
# install.packages("readxl")
library(readxl)
df <- read_excel("你的数据.xlsx")

2. 查看数据(先看懂数据)

head(df)          # 前6行
str(df)           # 结构:数字/字符/日期
summary(df)       # 统计信息
dim(df)           # 行数×列数
colnames(df)      # 列名

3. 处理缺失值(最常见)

# 查看是否有缺失
is.na(df) %>% sum()

# 查看每列缺失数量
colSums(is.na(df))

# 1. 删除含缺失值的行
df_clean <- df %>% drop_na()

# 2. 用均值填充数值型缺失
df_clean <- df %>% replace_na(list(年龄 = mean(年龄, na.rm=TRUE)))

# 3. 用0填充
df_clean <- df %>% mutate_all(~replace(., is.na(.), 0))

4. 去除重复行

df_clean <- df %>% distinct()  # 一键去重

5. 筛选行、选择列

# 选择需要的列
df_clean <- df %>% select(姓名, 年龄, 收入)

# 筛选符合条件的行(例如年龄>20)
df_clean <- df %>% filter(年龄 > 20)

# 排序
df_clean <- df %>% arrange(desc(年龄))

6. 修改变量 & 重命名

# 重命名列
df_clean <- df %>% rename(新名字 = 旧名字)

# 修改变量类型
df_clean <- df %>% mutate(年龄 = as.numeric(年龄))

# 新增一列
df_clean <- df %>% mutate(收入等级 = ifelse(收入 > 5000, "高", "低"))

7. 数据格式转换(宽表 ↔ 长表)

绘图、建模必须用长数据,这一步非常重要!

# 宽表 → 长表(绘图/建模专用)
df_long <- df %>% pivot_longer(cols = -分组列, names_to = "指标", values_to = "数值")

# 长表 → 宽表
df_wide <- df_long %>% pivot_wider(names_from = "指标", values_from = "数值")

四、超实用高级清洗(工作必用)

1. 异常值处理

# 筛选 95% 分位以内数据,去掉极端异常值
df_clean <- df %>% filter(数值列 > quantile(数值列, 0.025) & 数值列 < quantile(数值列, 0.975))

2. 字符去空格、统一大小写

df_clean <- df %>% mutate(姓名 = str_trim(姓名), 姓名 = str_to_cn(姓名))

3. 日期格式标准化

# install.packages("lubridate")
library(lubridate)
df_clean <- df %>% mutate(日期 = ymd(日期))

4. 分组汇总(清洗后常用)

df_summary <- df %>%
  group_by(类别) %>%
  summarise(均值 = mean(数值, na.rm=TRUE),
            总数 = n())

五、一套万能清洗代码(直接套用)

把下面代码里的 df 换成你的数据,一键清洗完成

df_clean <- df %>%
  drop_na() %>%                # 删缺失
  distinct() %>%               # 去重
  select(需要的列) %>%         # 选列
  filter(条件) %>%             # 筛选行
  mutate(新列 = 计算) %>%      # 新增列
  rename(新名 = 旧名)          # 重命名

六、你只需要记住 4 个核心函数

  1. select():选列
  2. filter():筛选行
  3. mutate():新增/修改列
  4. drop_na() / distinct():清洗脏数据