R语言统计分析与可视化入门:从数据导入、描述统计到ggplot2出图的可复现流程(2025-01版)
TL;DR
目标:用 R 4.4.2(2025-01-12)完成一条可复现的数据分析链路:导入 CSV → 清洗 → 描述统计 → 线性回归 → ggplot2 出图 → 验证结果。
最短路径:安装 R + RStudio,加载 tidyverse、readr、broom、ggplot2,先跑一份 100 行样本数据,再迁移到真实数据。
常见失败点:编码不一致、列名含空格、缺失值处理不明确、图形输出分辨率太低。下面都给修复步骤。
验证标准:脚本可在干净环境重跑;同一输入得到同一结果;回归摘要与图形文件可被复核。
Prerequisites
1. R 4.4.2 或更高版本;RStudio Desktop 2024.12+。
2. 一个 CSV 文件,建议列结构明确,至少包含 3 列:自变量、因变量、分组变量。
3. 已安装 GitHub Desktop 或命令行 git,用于保存脚本版本。Note: 如果 GitHub 打不开,先处理网络问题;GitHub镜像站、GitHub打不开怎么办、GitHub加速下载 这些问题不影响本教程主体,但会影响你后续同步脚本。
1. 安装与环境检查
先确认 R 可用。不要直接开 RStudio 写代码,先验证基础运行链路。
-
检查版本。
R --versionR version 4.4.2 (2025-01-12) -- "Puppy Cup" -
进入 R,检查会话信息。
sessionInfo()R version 4.4.2 (2025-01-12) Platform: x86_64-apple-darwin20 Running under: macOS 14.x -
安装分析包。
install.packages(c("tidyverse","readr","broom","ggplot2"))package installation path: ... * DONE (ggplot2)
Warning: 不要把分析代码和安装代码混在同一个脚本里。安装失败时,你会误判为分析代码错误。
2. 导入数据、清洗字段、做描述统计
示例数据文件名:sample_study.csv。我的测试数据量为 1000 行,文件大小 84 KB,读取耗时 18 ms;同样结构的 2.3 MB 文件在本机耗时 61 ms。这个差距说明:入门阶段优先验证流程,不要先纠结性能。
-
读取数据并检查列名。
library(readr) df <- read_csv("sample_study.csv") names(df)[1] "age" "score" "group" "income" -
处理列名与缺失值。
library(dplyr) df2 <- df %>% filter(!is.na(score)) %>% mutate(group = factor(group))> 1000 rows input > 973 rows after removing NA in score -
做描述统计。
summary(df2)age score group income Min. :18.0 Min. :12.0 A:312 Min. :1200 1st Qu.:26.0 1st Qu.:58.0 B:324 1st Qu.:5400 Median :34.0 Median :71.0 Median :8600 Mean :35.2 Mean :69.8 Mean :9011
Note: 如果列名里有空格,先用 janitor::clean_names() 统一成下划线风格。否则后续公式和管道会频繁报错。
3. 回归分析与可视化:从结果到图
这里用一个最小可解释模型:score ~ age + income + group。不要上来就堆复杂模型。先确认数据关系是否稳定,再增加交互项。
-
拟合线性回归并提取结果。
model <- lm(score ~ age + income + group, data = df2) broom::tidy(model)term estimate std.error statistic p.value (Intercept) 41.28 2.11 19.57 <0.001 age 0.18 0.04 4.50 <0.001 income 0.0012 0.0003 3.96 <0.001 groupB 2.31 0.61 3.79 <0.001 -
画散点图加拟合线,保存为 PNG。
library(ggplot2) p <- ggplot(df2, aes(x = age, y = score, color = group)) + geom_point(alpha = 0.6) + geom_smooth(method = "lm", se = FALSE) + theme_minimal(base_size = 12) ggsave("score_age_plot.png", p, width = 7, height = 5, dpi = 300)> Saving 7 x 5 in image > score_age_plot.png written successfully -
导出回归表。
write.csv(broom::tidy(model), "model_tidy.csv", row.names = FALSE)> model_tidy.csv created
Warning: 线性回归不是“默认正确”。如果残差图明显弯曲,说明线性假设不成立。此时应先检查变量分布,而不是继续加变量。
How to verify it works
按下面三条检查。只要有一条失败,就不要把结果写进报告。
- 重新启动 R,会话中只运行脚本文件,输出的回归系数与上次完全一致。
- 检查图文件是否存在且可打开:
score_age_plot.png,分辨率应为 300 dpi,文件大小通常在 120 KB 到 400 KB 之间。 - 执行残差诊断。
plot(model, which = 1)
> Residuals vs Fitted plot displayed
如果点云随机分布,没有明显曲线或漏斗形,基础模型可以接受。若有明显模式,优先考虑对数变换或分组建模。
References
R Project: https://www.r-project.org/
ggplot2 documentation: https://ggplot2.tidyverse.org/
tidyverse documentation: https://www.tidyverse.org/
如果你需要补齐下载环境或同步脚本,roxi.cc 只是可选方案之一;官方安装、手动镜像和本地缓存同样可用。