当我们在拿到一份数据时,是否遇到过想要分析数据却无从下手?通过编程语言去利用它时发现有很多报错不是来源于代码而是因为数据里有很多脏数据;在这个时候,如果你会用R语言来对数据进行清洗,这会让你的效率提升很多。
R语言的典型使用场景
统计分析
执行假设检验(t检验、卡方检验)、回归分析、方差分析等
优势:内置stats包提供100+统计函数,如lm(), aov()
数据可视化
绘制统计图表(散点图、箱线图、热力图)
优势:ggplot2语法比Python的matplotlib更直观
学术研究
自动生成可重复报告(R Markdown)
对比:Word+Excel手动操作效率低
数据清洗的必备知识
1、缺失值处理:很多时候出于不同的原因,像连接表格时有的列是连接前不具备的,亦或是数据在加载时发生错误,我们会在数据里发现很多NA值,当然这并不意味着它代表数据有问题,也有可能是数据本身的特点,NA代表了某种属性,此时我们既可以将其替换成0或1,也可以新建一列来标记这个缺失值
2、数据类型检查:在R语言中,我们会经常看到把时间数据转换为日期格式,或者把数据处理完后因子化的操作,这可以让我们得以在后续进行类似于统计数据分布,更好地观察到数据结构
3、管道化操作:在编写脚本的过程中,我们在编写某一个数据时会在中间穿插“%>%”的符号,代表后续操作在同一管道中进行,也就是可以在不干扰其他数据的情况下,对单独的数据进行操作,避免出现全局变量的影响
R语言的常见筛选语法
基础筛选
# 按行筛选
df[df$age > 18, ]
subset(df, age > 18 & gender == "F")
# 按列筛选
df[, c("id", "name")]
dplyr包特有的语法
library(dplyr)
df %>%
filter(age %in% 20:30) %>% # 年龄在20-30岁
select(starts_with("test")) %>% # 选择以test开头的列
arrange(desc(score)) %>% # 按分数降序
distinct(id, .keep_all = TRUE) # 去重保留第一条
条件替换
df %>%
mutate(grade = case_when(
score >= 90 ~ "A",
score >= 60 ~ "B",
TRUE ~ "C" # 默认值
))
处理缺失值
na.omit(df) # 删除含NA的行
df[complete.cases(df), ] # 等价写法
df %>% drop_na(score) # 删除score列NA的行na.omit(df) # 删除含NA的行
df[complete.cases(df), ] # 等价写法
df %>% drop_na(score) # 删除score列NA的行
特殊筛选
diag.raw[grep(急性心衰|(衰竭),]$ahf <- 1 #通过筛选正则化的模糊关键词,直接创建新列并赋予值