900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > r 字符串转化为数值_【R语言】tidyverse之一:读写数据

r 字符串转化为数值_【R语言】tidyverse之一:读写数据

时间:2022-01-07 22:35:15

相关推荐

r 字符串转化为数值_【R语言】tidyverse之一:读写数据

一. 相关包简介

(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

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

2.导入多个csv文件

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

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

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

list_of_files

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

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

这里用 map_dfr() 函数:

map_dfr

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

library

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

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

light_trap

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

.

三. 导出数据

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

iris

参考文献:

Desi Quintans, Jeff Powell. Working in the Tidyverse. /Garrett Grolemund, Hadley Wickham. R for Data Science. https://r4ds.had.co.nz/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。