【tidyverse】part1:数据导入

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()

往往数值型在输入时会有以下几个问题需要注意的:

  1. 分隔符不同,有使用「.」或者「,」的情况;因此需要使用locale = locale(decimal_mark = '*')来指定输入的分隔符;默认为「.」,另一个选项为「,」,只有这两种选项可以使用
  2. 数值可能与其他符号相连,类似「%」或「¥」等;但好在parse函数族会自动解决这种情况,会忽略除了数字以外的其他字符
  3. 数值可能不会进行位数分隔,类似于「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_*函数族来进行数据的导出,这一族的数据导出的数据有以下两点优点:

  1. 永远使用UTF-8编码
  2. 将日期值按「ISO-8601」编码标准来存储,使得在任何情况下都能被正确读取
  • 该族函数的第一重要个参数为要导出的数据框
  • 第二个重要的参数为路径(如果没有特别指定,一般都是R的当前默认工作路径,使用getwd()函数直接获取)
  • 通过帮助文档可以获取更多参数信息,如NA
  • 导入和导出的函数命名方式往往都差不多,掌握一个就可以触类旁通

小结

  • 每个导入函数都有对应的write_*()导出函数
  • 要时刻注意导出函数的第一和第二参数分别为要导出的数据框和保存路径(默认为R工作路径),其他参数查看帮助文档
  • 导出时如果没有对数据进行预先处理,那么导入数据时仍会有出错,因此要时刻注意列的类型转换
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容