7  R 中 CSV 与 Excel 文件的读取和写出

7.1 本章学习目标

完成本章后,你将能够:

  • 理解 CSV 与 Excel 文件的基本特点
  • 掌握 CSV 文件的读取与写出方法
  • 掌握 Excel 文件在 R 中的读取方法
  • 能够处理文件读取中的常见问题

7.2 第一部分:CSV 文件的读取与写出

7.2.1 什么是 CSV 文件

CSV 是 Comma-Separated Values 的缩写,表示“逗号分隔值”文件。

它是一种最常见的文本数据格式,特点包括:

  • 文件体积较小
  • 跨平台兼容性强
  • 可以被 Excel、R、Python 等多种软件读取
  • 本质上是一个纯文本文件

在数据分析中,CSV 是最基础、最常见的数据交换格式之一。


7.2.2 为什么学习 CSV 文件

在 R 中,CSV 文件非常重要,因为:

  • 很多原始数据会以 CSV 形式保存
  • Excel 数据常常会先导出为 CSV 再导入 R
  • CSV 文件便于共享与复现
  • 大多数数据分析项目都会接触 CSV 文件

7.2.3 使用绝对路径

你的文件放在某个文件夹下,可以使用CTRL + SHIFT +H 快捷键到指定目录(文件夹)地址:

查看当前工作路径:

getwd()

查看当前目录中的文件:

list.files()

👉下载 iris 数据

iris_data <- read.csv("iris.csv")

7.2.4 CSV 文件的读取

在 R 中,最常用的读取函数是 read.csv(), read.csv()是 R 语言中用于读取 CSV 文件的基础函数,该函数将逗号分隔的文本数据转换为数据框对象,默认参数设置中 header = TRUE 表示首行作为列名,sep = “,” 指定分隔符为逗号,stringsAsFactors = FALSE 避免自动将字符串转换为因子类型,典型用法如 df <- read.csv(“data.csv”, na.strings = “NA”) 可通过 na.strings 参数指定缺失值标识符,该函数支持本地文件路径或网络 URL 作为数据源,是数据导入最常用的基础方法之一。

示例:

iris_data <- read.csv("iris.csv")
head(iris_data)

该函数会把 CSV 文件读入为一个 data.frame(数据框)

查看数据类型:

class(iris_data)

查看数据结构:

str(iris_data)

7.2.5 读取 CSV 时的常用参数

保留字符串而不是自动转因子

data1 <- read.csv("iris.csv", stringsAsFactors = FALSE)

指定文件编码

如果文件中有中文,可能需要指定编码,如👉下载土壤数据

data2 <- read.csv("soil_data.csv", fileEncoding = "UTF-8")

通常 CSV 文件第一行是变量名,因此一般使用默认的 header = TRUE


7.2.6 CSV 文件写出

R 中可以使用 write.csv() 将数据导出为 CSV 文件。

例如,将 iris 数据写出到 指定(Ctrl + Shift + H) 文件夹:

write.csv(iris, "iris_export.csv", row.names = FALSE)

参数说明:

  • 第一个参数:要导出的数据对象
  • 第二个参数:输出文件路径
  • row.names = FALSE:不导出行名

如果不加 row.names = FALSE,导出的文件会多出一列行号。


7.2.7 CSV 文件操作常见问题

  • 路径错误

如果写成:

read.csv("iris.csv")

但文件并不在当前工作目录中,就会报错。

解决方法:

  • 检查当前工作路径
  • 检查文件是否确实存在
  • 推荐使用 Project 和相对路径

  • 中文乱码

如果 CSV 中有中文,读入后可能乱码。

解决方法:

  • 尝试指定 fileEncoding = "UTF-8"
  • 或尝试 fileEncoding = "GBK"

  • 分隔符问题

有些文本文件不是逗号分隔,而是分号或制表符分隔。

这时 read.csv() 可能不适用,需要改用其他函数,例如:

read.table("example.txt", sep = "\t", header = TRUE)

7.2.8 小结:CSV 文件部分

  • read.csv() 用于读取 CSV 文件
  • write.csv() 用于导出 CSV 文件
  • 推荐使用 Project 和相对路径
  • 中文文件要注意编码问题
  • CSV 是 R 数据导入导出的基础格式

7.3 第二部分:Excel 文件的读取

7.3.1 为什么要学习 Excel 文件读取

虽然 CSV 很常见,但很多原始数据最初是保存在 Excel 文件中的,例如:

  • 实验记录表
  • 调查数据表
  • 监测数据表
  • 学生成绩表

因此,在 R 中直接读取 Excel 文件也非常重要。


7.3.2 Excel 文件的特点

Excel 文件常见扩展名为:

  • .xls
  • .xlsx

与 CSV 不同的是,Excel 文件:

  • 可以包含多个工作表(sheet)
  • 可以有格式、颜色、公式等内容
  • 不是纯文本文件

因此,R 读取 Excel 需要额外的扩展包。


7.3.3 读取 Excel 文件常用包

最常用的包是 readxl

安装包:

#| eval: false
install.packages("readxl")

加载包:

library(readxl)

7.3.4 读取 Excel 文件

假设有一个文件:

soil_data.xlsx

读取方式:

library(readxl)
excel_data <- read_excel("soil_data.xlsx")
head(excel_data)

7.3.5 查看 Excel 文件中的工作表

如果一个 Excel 文件中有多个 sheet,可以先查看 sheet 名称:

excel_sheets("soil_data.xlsx")

7.3.6 指定读取某个工作表

可以按名称读取:

sheet1_data <- read_excel("soil_data.xlsx", sheet = "Sheet1")

也可以按位置读取:

sheet2_data <- read_excel("soil_data.xlsx", sheet = 2)

7.3.7 Excel 读取后的数据类型

read_excel() 读取后的结果通常也是一个数据框(更准确地说是 tibble)。

例如:

class(excel_data)

查看结构:

str(excel_data)

7.3.8 CSV 与 Excel 的比较

文件类型 优点 适用场景
CSV 简单、通用、兼容性强 数据交换、批量处理
Excel 支持多工作表、便于人工整理 原始记录、实验表格

在实际数据分析中:

  • 数据整理阶段常使用 Excel
  • 数据分析阶段常导出为 CSV 或直接读 Excel

7.4 本章小结

  • CSV 是最常见的数据交换格式

  • read.csv() 用于读取 CSV 文件

  • write.csv() 用于导出 CSV 文件

  • Excel 文件需要使用 readxl 包读取

  • read_excel() 可以读取 .xls.xlsx 文件

  • 推荐使用 Project 和相对路径管理数据文件

  • 文件读取中最常见的问题是路径错误与编码问题

    图7.1文件读取总结

7.5 课堂练习

  1. iris 数据导出为 CSV 文件
  2. 使用 read.csv() 将该 CSV 文件重新读入
  3. 读取一个 Excel 文件,并查看其中有哪些工作表
  4. 尝试指定某一个 sheet 读入数据
  5. 比较 read.csv()read_excel() 读入数据后的结构差异