夜里第一次跑通R:从CSV清洗到论文图表的统计分析实操
凌晨的CSV:先把环境安顿好
昨晚十一点半,窗外的雨敲着空调外机,我收到一位读研朋友的消息:“问卷收完了,R语言怎么用?明天组会要一张图。”这大概是很多科研人的第一夜:数据不大,焦虑很大。我们在开源学术站常说,工具不是魔法,它只是把混乱慢慢照亮。先做最稳的事:安装R和RStudio,R负责计算,RStudio负责让你不迷路;如果你搜索“R语言下载”,记得优先使用R Project与Posit提供的官方安装包,Windows用户安装默认选项即可。
打开RStudio后,先新建一个Project,把CSV、脚本、输出图都放在同一文件夹。不要在桌面上散养文件,这是统计分析最常见的第一处灾难。假设你的数据叫 survey.csv,包含 group、score、age 三列,可以先跑这段:
install.packages(c("tidyverse","readr","ggplot2"))
library(tidyverse)
dat <- read_csv("survey.csv")
glimpse(dat)
summary(dat)
如果中文列名乱码,通常是编码问题,可试试:dat <- read_csv("survey.csv", locale = locale(encoding = "GB18030"))。在我用一份312行、8列的问卷数据测试时,读取耗时约0.18秒;真正花时间的不是计算,而是发现某个“年龄”被填成了“二十三”。
从脏数据到第一个统计结论
很多“R语言统计分析教程”讲得太快,仿佛数据天生干净。现实不是这样。先检查缺失值、重复值和类型错误,再谈均值和显著性。下面是一套我自己写论文前常用的最小流程:
检查缺失:
colSums(is.na(dat))去除完全重复行:
dat <- distinct(dat)把分组变量转为因子:
dat <- dat %>% mutate(group = factor(group))按组计算样本量、均值、标准差:
dat %>% group_by(group) %>% summarise(n=n(), mean=mean(score, na.rm=TRUE), sd=sd(score, na.rm=TRUE))
如果你比较两组得分,例如实验组与对照组,可以先看分布,再做t检验:
ggplot(dat, aes(x=group, y=score, fill=group)) + geom_boxplot(width=0.55) + theme_minimal()
t.test(score ~ group, data = dat)
不要只盯着p值。若p=0.03,你还要看均值差异是否有实际意义;如果每组只有8个人,箱线图里一个离群点就可能改变故事。技术能给答案,但不能替你判断答案是否诚实,这也是学术训练最安静、最难的一部分。
画一张能进论文的图,并验证它真的可复现
“R语言可视化入门”最推荐从ggplot2开始,因为它的语法像搭积木:数据、映射、几何图层、主题。下面这张均值误差图,适合组会和论文初稿:
plot_dat <- dat %>% group_by(group) %>% summarise(mean=mean(score, na.rm=TRUE), se=sd(score, na.rm=TRUE)/sqrt(n()))
p <- ggplot(plot_dat, aes(group, mean, fill=group)) +
geom_col(width=0.6) +
geom_errorbar(aes(ymin=mean-se, ymax=mean+se), width=0.15) +
labs(x="Group", y="Score", title="Mean score by group") +
theme_classic(base_size=12)
ggsave("figure_score.png", p, width=6, height=4, dpi=300)
这会生成一张约1500×1200像素、300 dpi的PNG图,足够放进多数论文初稿。如果期刊要求矢量图,改成 ggsave("figure_score.pdf", p, width=6, height=4)。如果你在找“R语言作图怎么用”,记住一个原则:先保证标签、单位、样本量清楚,再谈配色。
如何验证它确实跑通:第一,Console没有红色报错;第二,Environment里能看到dat与plot_dat;第三,文件夹里出现figure_score.png;第四,重新打开RStudio,只运行脚本不手动点任何对象,仍能得到同一张图。若想记录环境,运行 sessionInfo(),把R版本和包版本写进项目日志。
免费的官方文档、R内置帮助 ?t.test、包内示例 example(ggplot) 已经能解决大多数入门问题;如果你还需要网络访问或开源社区加速,Roxi 只是可选方案之一,可从 wizzegroup.com 了解,DIY与学校网络同样值得优先尝试。夜深时,能复现的脚本像一盏小灯,它不替你写论文,却让明天的你少一点慌张。