r语言 将表格导出为csv_【R语言】tidyverse之一:读写数据

本文介绍了R语言中tidyverse包的使用,包括tibble、readr、readxl、writexl、haven和readtext包。内容涵盖数据框的创建与转化、CSV和Excel文件的读写、SPSS、Stata和SAS数据文件的读写,以及如何处理数据类型的转换问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

e21cbf7c9a947554f41b2fabc3006294.png

一. 相关包简介

(1) tibble包

R 数据框的更先进的替代,不将字符串转化为因子型,不重命名列,输出内容更智能,选择 tibble 子集仍是 tibble(Base R 中,1列返回向量)

  • 查看数据框:glimpse()
  • 创建数据框:tibble()和 tribble() (智能行tibble)
  • 强制转化为数据框:as_tibble()和enframe()
  • 操作行名:rownames_to_column()和column_to_rownames()

(2) readr包

读写纯文本文件,包括带分隔符的文本文件,如 csv和 tsv. 也能读写序列化的 R 对象 rds,若想保存数据集后续再加载回来,rds将保存元数据和该对象的状态,如分组和数据类型。

  • 读入数据到数据框:read_csv()和read_tsv()
  • 读入欧式格式数据(“;”为字段分隔符,“,”为小数位):read_csv2() 和 read_tsv2()
  • 读写rds:read_rds()和write_rds()
  • 写入电子表格:write_csv(), write_tsv(), write_csv2(), write_tsv2()
  • 转化数据类型:parse_number(), parse_logical(), parse_factor()等

(3) readxl包

专门读取 Excel 文件,包括同一个工作簿中的不同工作表。

  • read_excel(): 自动检测文件扩展名
  • read_xls()
  • read_xlsx()

(4) writexl包

  • write_xlsx():写入Excel文件

(5) haven包

读写 SPSS, Stata, SAS 数据文件。

  • 读:read_spss(), read_stata(), read_sas()
  • 写:write_spss(), write_stata(), write_sas()

(6) readtext包

读取全部文本文件的内容到数据框,每个文件变成一行,通常用于语言分析或数据收集。

  • readtext()

二. 导入数据

下面以导入 csv 文件为例,演示从一个文件或多个文件读入数据,其它类型文件换成对应读入函数即可。

1. 导入一个csv文件

trap_ins <- read_csv("data/light_trap/1992.csv")
glimpse(trap_ins)

f85809c57610d0cc08bc60356be44164.png

注意,readr 包试着猜测每列的数据类型(数值型、字符型等),但属于保守猜测,以避免丢失信息。本例中,date 列为字符型,因为它没有认出日期格式,individuals 列为 Double 型。通常更建议随后再用 dplyr 包修改数据类型。

2. 导入多个csv文件

若每个 csv 文件的列结构相同,则可以全部导入再按行合并。

最好的做法是用 purrr 包迭代实现。

先列出要导入的csv文件的路径:

list_of_files <- list.files("data/light_trap/", pattern="csv", full.names=TRUE)
list_of_files

a30b0f1c99d1d794c5520371e8287558.png

接着,在其上做迭代,应用 read_csv() 到每个文件路径,再按行合并。

可以用 Base R 自带的 apply 函数族,但更建议用 purrr 包,其用户接口更容易记,并返回可预见的数据类型,还可用于管道操作。

这里用 map_dfr() 函数:

map_dfr(.x, .f, .id = "id_col")

它应用函数 .f 到列表或向量 .x 的每个元,再将每个结果做“行合并”创建数据框,并增加新列 id_col 描述该行来自哪个文件。

library(purrr)
light_trap <- map_dfr(.x=set_names(list_of_files), .f=read_csv, .id="source_file")  # names用于.id
glimpse(light_trap)

a1c8634f48e08afdcb3161e97cf63739.png

经常遇到的一个问题是,数据表的列具有不同的数据类型。例如,某表 presence/absence 编码为 1/0, 而另一个表编码为 TRUE/FALSE. 则这样的列不能做“行合并”,因为 R 不知道如何转化类型。

此时,你可以告诉 read_csv() 以字符形式导入所有列,后续再处理类型转化。

light_trap <- map_dfr(.x = set_names(list_of_files), .f = ~ read_csv(.x, col_types=cols(.default="c")), .id = "source_file")
glimpse(light_trap)

69b0d66c28814eafbc016b0b5a3365f1.png

说明:“~”是 purrr 包对匿名函数的缩写,等同于

.f = function(.x) {read_csv(.x, col_types = ...)}

三. 导出数据

用 readr 包中的 write_csv() 和 write_rds() 可以保存数据框到文件。下面以导出数据到 .rds 文件为例,因为它能保存数据框及其元数据,如数据类型和分组(若有的话)。

iris %>% write_rds("my_iris.rds")
my_import <- read_rds("my_iris.rds")  # 导入.rds数据

参考文献:

  1. Desi Quintans, Jeff Powell. Working in the Tidyverse. http://www.hiercourse.com/
  2. Garrett Grolemund, Hadley Wickham. R for Data Science. https://r4ds.had.co.nz/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值