数据挖掘与R语言

数据导入与导出

2026年07月28日

上讲回顾

PREVIOUSLY...

  • 数据挖掘:用计算机从大量数据中自动发现规律
  • R 与 RStudio:R 是引擎,RStudio 是驾驶舱,先装 R 再装 RStudio
  • 基本运算:R 可以当计算器用,加减乘除、乘方、开方、对数、矩阵
  • 高级玩法:模拟“石头剪刀布”、🎲、扑克等
  • 变量赋值:用 <- 把值存起来,方便重复使用

提示

上节课我们学会了在 R 里做计算和存变量。但现实中的数据不可能在R中手动输入——它们存在csv文件或Excel表格里。 本节课解决一个最基本的问题:怎么把外部数据"请进"R?又怎么把 R 处理好的数据"送出去"?

本讲内容

CONTENTS

1 交互式导入鼠标点选,导入CSV与Excel

2 代码式导入一行代码搞定,两种方式对比

3 数据导出把结果保存为文件

4 总结 · 练习 · 作业


注记

本节课的核心目标:能独立完成"读入数据 → 查看数据 → 处理数据 → 保存结果"的完整闭环,并且理解为什么代码导入比鼠标点选更值得掌握

Part 1 交互式导入

鼠标点选,不写一行代码

1.1 一个真实的场景


假设你拿到了一份汽车数据 汽车.csv 和一份 Excel 表 excel_data.xlsx,需要在 R 里打开查看:

提示

RStudio 提供了一个图形化的导入工具——Import Dataset,不需要写代码,鼠标点选即可完成。这是最适合"第一次导入数据"的方式。

1.2 导入 CSV:From CSV

▶️ 查看代码
flowchart TD
    A["RStudio 右上角
Environment 面板"] --> B["点击 Import Dataset
→ From Text (readr)"]
    B --> C["选择 汽车.csv"]
    C --> D["预览界面:
调整名称、分隔符、编码"]
    D --> E["点击 Import 导入"]
    E --> F["数据出现在 Environment 中"]

    style A fill:#1a3a5c,color:#fff
    style B fill:#2e5984,color:#fff
    style D fill:#4a2f6b,color:#fff
    style E fill:#3d5c2f,color:#fff
    style F fill:#7a4419,color:#fff

flowchart TD
    A["RStudio 右上角
Environment 面板"] --> B["点击 Import Dataset
→ From Text (readr)"]
    B --> C["选择 汽车.csv"]
    C --> D["预览界面:
调整名称、分隔符、编码"]
    D --> E["点击 Import 导入"]
    E --> F["数据出现在 Environment 中"]

    style A fill:#1a3a5c,color:#fff
    style B fill:#2e5984,color:#fff
    style D fill:#4a2f6b,color:#fff
    style E fill:#3d5c2f,color:#fff
    style F fill:#7a4419,color:#fff

注记

菜单栏操作路径:File → Import Dataset → From Text (base) / From Text (readr)汽车.csv 是经典的 mtcars 数据集,包含32款汽车的油耗、气缸数、马力等信息。

1.3 导入 Excel:From Excel

excel_data.xlsx 里有两个工作表(Sheet1 是星球大战的人物信息、Sheet2 是企鹅测量数据),交互式导入时可以指定读取哪一个:

▶️ 查看代码
flowchart TD
    A["File → Import Dataset
→ From Excel"] --> B["选择 excel_data.xlsx"]
    B --> C{"选择 Sheet"}
    C -->|"Sheet1"| D["人物信息数据"]
    C -->|"Sheet2"| E["企鹅测量数据"]
    D --> F["预览界面:
调整 Range、Skip、列名"]
    E --> F
    F --> G["点击 Import 导入"]

    style A fill:#1a3a5c,color:#fff
    style C fill:#4a2f6b,color:#fff
    style F fill:#3d5c2f,color:#fff
    style G fill:#7a4419,color:#fff

flowchart TD
    A["File → Import Dataset
→ From Excel"] --> B["选择 excel_data.xlsx"]
    B --> C{"选择 Sheet"}
    C -->|"Sheet1"| D["人物信息数据"]
    C -->|"Sheet2"| E["企鹅测量数据"]
    D --> F["预览界面:
调整 Range、Skip、列名"]
    E --> F
    F --> G["点击 Import 导入"]

    style A fill:#1a3a5c,color:#fff
    style C fill:#4a2f6b,color:#fff
    style F fill:#3d5c2f,color:#fff
    style G fill:#7a4419,color:#fff

重要

注意 Sheet2 的数据并不是从 A1 开始的(前面空了几行几列)——预览界面里的 Range 选项就是用来处理这种"数据不在左上角"的情况的,交互式导入的好处正是能实时看到调整效果

1.4 交互式导入的预览界面

可调整的选项

  • Name:导入后的变量名
  • Sheet:选择哪个工作表(Excel)
  • Range:数据所在的单元格范围
  • Delimiter:分隔符(CSV用)
  • First row as names:第一行是否为列名

预览界面的妙用

预览界面会实时显示调整后的效果——能立刻看到数据长什么样、列名对不对、有没有错位。

更重要的是:窗口右下角会自动生成对应的代码

提示

推荐做法:第一次导入新文件时,先用交互式方式预览、确认参数,然后复制生成的代码保存到脚本里。这条代码,就是我们下一部分要讲的"代码式导入"的起点。

Part 2 代码式导入

一行代码,胜过千百次点选

2.1 代码导入 CSV:read.csv()

▶️ 查看代码
汽车 <- read.csv("汽车.csv")
head(汽车)
                  X  mpg cyl disp  hp drat    wt  qsec vs am gear carb
1         Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
2     Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
3        Datsun 710 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
4    Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
5 Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
6           Valiant 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

一步到位——把刚才"点选5次"的操作,浓缩成了1行代码:

▶️ 查看代码
汽车 <- read.csv("汽车.csv")

2.2 代码导入 Excel:read_excel()

Excel 文件需要 readxl 包,可以直接指定工作表:

▶️ 查看代码
library(readxl)

# 读取 Sheet1(人物信息)
星球大战 <- read_excel("excel_data.xlsx")
head(星球大战)
# A tibble: 6 × 14
  name      height  mass hair_color skin_color eye_color birth_year sex   gender
  <chr>      <dbl> <dbl> <chr>      <chr>      <chr>          <dbl> <chr> <chr> 
1 Luke Sky…    172    77 blond      fair       blue            19   male  mascu…
2 C-3PO        167    75 <NA>       gold       yellow         112   none  mascu…
3 R2-D2         96    32 <NA>       white, bl… red             33   none  mascu…
4 Darth Va…    202   136 none       white      yellow          41.9 male  mascu…
5 Leia Org…    150    49 brown      light      brown           19   fema… femin…
6 Owen Lars    178   120 brown, gr… light      blue            52   male  mascu…
# ℹ 5 more variables: homeworld <chr>, species <chr>, films <chr>,
#   vehicles <chr>, starships <chr>
▶️ 查看代码
# 读取 Sheet2(企鹅数据,数据从 C2 开始,前面有空行空列)
# range 参数正好对应交互式导入预览界面里的 "Range" 选项
企鹅 <- read_excel("excel_data.xlsx", sheet = "Sheet2")
head(企鹅)
# A tibble: 6 × 8
  species island    bill_len bill_dep flipper_len body_mass sex     year
  <chr>   <chr>        <dbl>    <dbl>       <dbl>     <dbl> <chr>  <dbl>
1 Adelie  Torgersen     39.1     18.7         181      3750 male    2007
2 Adelie  Torgersen     39.5     17.4         186      3800 female  2007
3 Adelie  Torgersen     40.3     18           195      3250 female  2007
4 Adelie  Torgersen     NA       NA            NA        NA <NA>    2007
5 Adelie  Torgersen     36.7     19.3         193      3450 female  2007
6 Adelie  Torgersen     39.3     20.6         190      3650 male    2007

2.3 效率对比:同一份数据,反复使用

真实场景中,一份数据往往不是"看一眼就完了",而是要反复清洗,因而需要反复导入

  • 实操对比:交互式导入 vs 代码导入
交互式导入

第1次:点 Import → 选文件 → 调参数 → Import

第2次:数据改了一版,从头再点一遍

第N次:换了新学期的数据,依然从头点一遍

代码式导入

第1次:写好 read.csv("汽车.csv")

第2次:数据改了一版,直接重新运行同一行代码

第N次:换了新数据,只改一个文件名,其余不变

重要

代码是"可复用的操作",鼠标点选是"一次性的动作"。数据只用一次时,两者差别不大;但只要这份数据要被多次导入、多次重跑(比如每周更新一次的销售报表),代码式的优势就是压倒性的。

2.4 留痕对比:能不能"看懂"一份表格是怎么来的?

再想一个问题:别人给你一份做好的漂亮 Excel 表格,你能看懂它是怎么来的吗?

鼠标点出来的表格

  • 你看到的,只有最终成品
  • 从原始数据到成品经过了哪些步骤(筛选?排序?合并?改了哪个单元格?),全部藏在制表人的脑子里
  • 想知道过程?只能让制表人从头到尾演示一遍——如果他忘了,或者离职了,这个过程就永远丢失了

代码生成的表格

  • 表格 + 一份代码,代码就是"操作说明书"
  • 打开代码,逐行读就能知道这张表是怎么从原始数据一步步变出来的
  • 别人(甚至未来的你自己)可以直接修改代码,复现一份一模一样的表格,或者改进代码,做出一份更好的表格

这就是"留痕"的价值

鼠标点选的过程不会留下任何记录,代码却会。这不只是"效率"问题,更是可追溯、可验证、可传承的问题——在真实工作中,代码本身就是最好的文档。

2.5 两种方式全面对比

对比维度 交互式导入 代码式导入
上手难度 低,所见即所得 需要记函数名和参数
重复使用同一数据 每次都要重新点选 直接重跑代码
换一份新数据 从头再点一遍 通常只改文件名
过程留痕 不留痕迹,无法追溯 代码即文档,逐行可查
可修改 / 可优化 难,只能重做 易,改代码即可
适合场景 第一次探索陌生数据 重复处理、正式交付

本节课的核心观点

交互式导入是入门的拐杖,代码导入才是真正的能力。用交互式导入快速摸清数据长什么样,然后复制它生成的代码,把探索的过程转化为可复用、可留痕的代码。

Part 3 数据导出

把处理好的结果保存为文件

3.1 导出为 CSV:write.csv()

▶️ 查看代码
write.csv(汽车, "cars.csv")

3.2 导出为 Excel:write_xlsx()

▶️ 查看代码
library(writexl)

write_xlsx(星球大战, "starwars.xlsx")

3.3 导出格式选择指南

场景 推荐格式 函数
给同事/老师看 Excel write_xlsx() / openxlsx
数据交换(通用) CSV write.csv()
只在 R 内部传递 RDS saveRDS()

提示

经验法则:不确定用哪个?就用 CSV。它是数据世界的"普通话"——任何软件都能读,永远不会出错。

Part 4 总结 · 练习 · 作业

RECAP

4.1 本讲小结

  • 交互式导入:RStudio 的 Import Dataset 功能适合探索新数据、确认参数,但不留痕、难复用
  • 代码式导入read.csv() 读 CSV,read_excel() 读 Excel(可指定 sheet)。一行代码,可以被无数次复用
  • 代码的两大核心优势:① 反复使用同一数据时效率碾压点选;② 代码本身就是留痕的操作说明书,可追溯、可修改、可优化
  • 数据导出write.csv() 导出通用格式;write_xlsx() / openxlsx 导出 Excel,openxlsx 还能写入已存在文件的指定 sheet

4.2 课堂练习:自己动手

课堂任务

  1. 用交互式导入(Import Dataset)打开 excel_data.xlsx 的 Sheet1,观察RStudio自动生成的代码
  2. 把生成的代码复制到脚本里,改写成 read_excel("excel_data.xlsx", sheet = "Sheet1")
  3. write.csv() 导出为企鹅数据为企鹅.csv

常见错误

  • 文件路径:不在当前路径时,需指定
  • 文件名错误:如大小写
  • 引号:忘记引号/中文引号

4.3 课后作业

  1. 用交互式方式导入一份你自己电脑上的 CSV 或 Excel 文件,观察并保存生成的代码
  2. read_excel() 分别读取 excel_data.xlsx 的 Sheet1 和 Sheet2,用 str() 对比两个表的结构

下讲预告

数据清洗与预处理

  • 缺失值的识别与处理
  • 重复值的检测与删除
  • 异常值的发现与处理

注记

本节课同学们学习了把数据"请进"R,也理解了为什么代码导入比鼠标点选更值得掌握。下一节课,我们将学习如何把"脏数据"洗干净,为分析建模做准备。

谢谢

THANKS

🤝
数据导入与导出
朱 奇 | 成都锦城学院