1. 基本数据导入与readr包应用
1.1 基本数据导入函数
readr包中的基本导入函数如下:
-
read_csv()
导入以逗号分隔符的csv文件 -
read_csv2()
导入以分号分隔符的csv文件 -
read_tsv()
导入以制表符分隔符的文件 -
read_delim()
导入任何分隔符的文件 -
read_table()
导入空格分隔符的文件
以上函数(或是未提及的)一旦掌握其中一个,就可以很轻松的触类旁通,本节以read_csv()
函数为例
1.2 深入解析
导入数据函数的第一个参数是最重要的一个,即数据文件的路径;只有确定了路径文件才能被正确的读入
当然,除了读取数据之外,还可以直接在函数里创建数据,类似于tibble一样
- 第一行会自动识别为是表头,之后才是数据
- 并且还有
skip=#
、na=
、comment=''
、col_names=
等其他参数可以协助更好的读入和创建数据表 -
n_max=n
参数表示最大读取记录的数量,guess_max=n
参数表示最大读取列的数量
skip
表示跳过数据的前几行,从跳过的行之后开始读取
read_csv('the first line of metadata
the second line of metatd
x, y, z
1, 2, 3', skip = 2)
comment
表示指定注释符,即读取跳过注释符号所注释的内容
read_csv("# A comment I want to skip
x,y,z
1,2,3", comment = "#")
na
表示缺失值的呈现方式,可以自己指定
read_csv("a,b,c\n1,2,.", na = ".")
col_names
表示是否将输入内容指定为列名,参数为逻辑值
1.3 readr包的函数对比于R的基础导入函数
- 速度比R基础的导入函数更快(大约10倍)
- 可以直接生成tibble格式,不需要再额外转换
- 可重复展示
1.4 其他方式导入数据
当然还有个别的导出方式可供参考,可以分别使用以下包来进行获取:
- haven包:读取spss、stata、sas格式的文件
- readxl包:读取Excel文档(包括.xls和.xlsx格式)
- DBI包:提供各种SQL数据库的接口
小结
- readr包中导入数据的函数用法基本一致,掌握一个对其他就可以触类旁通
- 读取数据时一定要时刻记住,第一个参数是文件的路径
- 其他参数可以帮助更好的导入数据,如设置最大读取的数量
- readr包的函数比R基础导入函数能导入速度更快
- 除了基本导入函数还要有其他包可以提供其他格式的导入方法
--
2. 数据类型转换
2.1 类型转换函数
使用parse_*()
函数族能将字符向量转换为特定类型的向量(如逻辑型、整型等),其功能大致类似于R基础的as.*函数
- 第一个参数是要转换的字符
- 第二个参数为要作为NA值处理的字符
parse_integer(c("1", "231", ".", "456"), na = ".")
- 如果转换失败,可以使用
problems
函数来查看转换失败的信息
在这个函数族中,有8个尤为重要的函数:
-
parse_logical()
和parse_integer()
-
parse_double()
和parse_number()
-
parse_character()
(要注意encodings编码格式) parse_factor()
-
parse_datetime()
、parse_date()
、parse_time()
(最复杂的一组)
2.2 函数详解
数值型:parse_number()
往往数值型在输入时会有以下几个问题需要注意的:
- 分隔符不同,有使用「.」或者「,」的情况;因此需要使用
locale = locale(decimal_mark = '*')
来指定输入的分隔符;默认为「.」,另一个选项为「,」,只有这两种选项可以使用 - 数值可能与其他符号相连,类似「%」或「¥」等;但好在parse函数族会自动解决这种情况,会忽略除了数字以外的其他字符
- 数值可能不会进行位数分隔,类似于「123,456,789」这种情况不会进行位数分隔;因此需要在第一种情况下,将
decimal_mark
替换位grouping_mark
字符串型:parse_character()
在现实中,往往会因为编码不同而无法正确识别文本,虽然可以通过参数来修改,但是修改的第一步是对字符进行判断;readr包提供了guess_encoding()
函数来帮助确认字符属于哪种编码格式
- 但需要注意的是,在函数中使用
charToRaw(character)
转化为16进制的字符,guess_encoding()
函数才能起作用,否则会报错- 当然,其第一个参数也可以是文件的路径
之后便可以将在locale()
参数中使用encoding=*
来进行编码的修改
因子型:parse_factor()
该函数可以也可以像factor()
函数一样指定水平
- 但有一点需要注意的是,该函数并没有
label
参数,即将水平与标签合二为一。因此需要格外注意
日期型:parse_datetime(),parse_date(),parse_time()
像MySQL里的一系列date函数一样,可以分别获取日期数据的年月日、时分秒等;
并且还可以使用R转换为时间值的format类型(%b、%Y等)
- 大写的字母格式往往表示全称,而小写的字母则表示简略缩写
- 第一个参数为时间,第二个参数为格式
parse_date("01/02/15", "%y/%m/%d")
2.3 文件转换
readr包可以通过文件数据中的某些关键字,启发式地自动判断读入的文件的数据类型;
当然类似于猜测编码格式一样,readr的另一个函数可以帮助来判断一个向量的数据类型:
- 使用
guess_parser()
函数或parse_guess()
函数
在使用read_*
数据导入函数族时,使用col_types=cols(column = col_type)
参数来指定变量的类型,既能避免readr错误识别变量类型,还能加快读取速度;这就类似于R基础导入数据中的colClass
参数
- 每一个
col_*
函数都对应着parse_*
,能在读取时将变量进行类型转换 - 如果已经读取数据,发现变量类型错误,不再想重新读入;则直接使用
type_convert()
函数中的col_type=
来直接修改变量类型
小结
-
parse_*()
函数族类似于R基础函数中的as.type
函数族,能对变量进行类型转换;大致上不同类型的用法语句基本相似,在实际情况中使用帮助文档来查看即可 - 提高数据文件读取速度的方法是:设置最大读取的数量并且为变量指定类型
- 使用
problems()
函数可以查看报错的具体情况
--
3. 数据导出
使用readr包的write_*
函数族来进行数据的导出,这一族的数据导出的数据有以下两点优点:
- 永远使用UTF-8编码
- 将日期值按「ISO-8601」编码标准来存储,使得在任何情况下都能被正确读取
- 该族函数的第一重要个参数为要导出的数据框
- 第二个重要的参数为路径(如果没有特别指定,一般都是R的当前默认工作路径,使用
getwd()
函数直接获取) - 通过帮助文档可以获取更多参数信息,如
NA
等 - 导入和导出的函数命名方式往往都差不多,掌握一个就可以触类旁通
小结
- 每个导入函数都有对应的
write_*()
导出函数 - 要时刻注意导出函数的第一和第二参数分别为要导出的数据框和保存路径(默认为R工作路径),其他参数查看帮助文档
- 导出时如果没有对数据进行预先处理,那么导入数据时仍会有出错,因此要时刻注意列的类型转换
网友评论