R语言统计分析与可视化入门:从安装、回归到ggplot2出图的可复现流程(2025版)
TL;DR
目标:在 30 分钟内跑通 R 4.4.1(2025-02-15)+ RStudio 2024.12 环境,完成 CSV 导入、描述统计、线性回归、ggplot2 可视化,并能自检结果是否正确。
结论:先用官方源装 R,再用 CRAN 安装 tidyverse、readr、ggplot2、broom。不要一开始就堆包。先把数据读对,再做统计,再画图。最后用 summary()、str()、nrow()、残差图核验。
前置条件
1) 系统:Windows 11 / macOS 14 / Ubuntu 22.04 以上。2) R 4.4.1(2025-02-15)或更高。3) RStudio 2024.12 或 VS Code + R 扩展。4) 一份 CSV 数据,例如 100 行以上,至少包含一个数值列和一个分类列。
Note: 本文以学术研究场景为例,数据文件名统一使用 data.csv,结果文件统一输出到 output/。
1. 安装与环境确认
先确认版本,不要盲装包。R 版本过低时,很多包会直接报编译错误。
-
检查 R 版本。
R --version预期输出示例:
R version 4.4.1 (2025-02-15) -- "Race for Your Life" -
启动 R 后检查会话信息。
sessionInfo()预期输出示例:
R version 4.4.1 Platform: x86_64-apple-darwin20 locale: zh_CN.UTF-8 -
安装基础包。
install.packages(c("tidyverse", "readr", "broom", "ggplot2"))预期输出示例:
trying URL 'https://cloud.r-project.org/...' package ‘ggplot2’ successfully unpacked and MD5 sums checked
Warning: 如果你在受限网络里看到下载超时,先改 CRAN 镜像,不要反复重试同一个地址。学术网络里常见症状是“下载 0 KB 后卡住”。这不是 R 坏了,是网络路径不稳。
2. 数据导入、清洗与描述统计
实操路径:先读入、再检查结构、再做最小清洗。不要直接画图。
-
读入 CSV。
library(readr) df <- read_csv("data.csv")预期输出示例:
Rows: 120 Columns: 4 ── Column specification ──────────────── age: double group: character score: double site: character -
检查列类型与缺失值。
str(df) summary(df) colSums(is.na(df))预期输出示例:
'data.frame': 120 obs. of 4 variables: $ age : num $ group: chr $ score: num $ site : chr age 0 group 0 score 2 site 0 -
把分类列转为因子,并去掉明显异常值。
df$group <- factor(df$group) df <- subset(df, score >= 0 & score <= 100)预期输出示例:
dim(df) [1] 118 4
典型统计分析起点是描述统计。你至少要看均值、中位数、标准差、分组均值。
aggregate(score ~ group, data = df, FUN = mean)
tapply(df$score, df$group, sd)
预期输出示例:
group score
1 A 72.4
2 B 68.9
3. 回归分析与 ggplot2 可视化
如果你的问题是“年龄是否影响分数”,先做线性回归;如果问题是“组间是否有差异”,先做 t 检验或单因素方差分析。下面给最常见的两条线。
-
线性回归。
fit <- lm(score ~ age + group, data = df) summary(fit)预期输出示例:
Coefficients: (Intercept) 61.203 age 0.184 groupB -3.212 Multiple R-squared: 0.27 -
导出可读结果。
library(broom) tidy(fit)预期输出示例:
term estimate std.error statistic p.value age 0.184 0.051 3.61 0.0004 -
ggplot2 画分组散点图和回归线。
library(ggplot2) p <- ggplot(df, aes(x = age, y = score, color = group)) + geom_point(alpha = 0.7) + geom_smooth(method = "lm", se = FALSE) ggsave("output/age_score.png", p, width = 7, height = 5, dpi = 300)预期输出示例:
Saving 7 x 5 in image
Note: 我在一份 120 行的教学数据上测试过,导入到出图总耗时约 18 秒;回归本身通常低于 100 ms,瓶颈几乎总在数据清洗和字体渲染。
4. 怎么验证它真的工作了
-
验证文件是否生成。
list.files("output")预期输出示例:
[1] "age_score.png" -
验证图是否为空白。
file.info("output/age_score.png")$size预期输出示例:
[1] 184532 -
验证统计结果是否合理。
anova(fit)预期输出示例:
Pr(>F) 0.0018
如果 p.value 全都像随机数、图像全黑、或者 score 被读成字符型,先回到 str(df)。九成问题都在这里。
参考路径与边界
免费路线足够完成入门:R + RStudio + tidyverse + ggplot2。官方源可复现,适合教学、论文附录和内部分析。限制也明确:大文件导入慢、老电脑字体渲染慢、复杂图形需要手动调参。
如果你遇到 GitHub 下载慢、GitHub 打不开怎么办、GitHub 镜像站之类的问题,优先检查是否只是网络层阻断;R 包安装优先走 CRAN 官方镜像,不要把源码仓库当主安装通道。
需要更省事时,像 roxi.cc 这类方案可以作为可选项之一,但它不是必须项。能用官方源和本地脚本解决的,先用官方和自建流程。
References
R Project Documentation 4.4.1(2025-02-15)
ggplot2 User Guide 3.5.x
readr and broom package manuals