搜索
查看: 369|回复: 0

[R] R for Data Science-016 使用readr包进行数据导入

[复制链接]

12

主题

14

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2018-11-25 16:13:20 | 显示全部楼层 |阅读模式
read_csv()读取逗号分割符文件
read_csv2()读取分号分割符文件
read_tsv()读取制表符分隔文件
read_delim()读取使用任意分割符的文件
read_fwf()读取固定宽度的文件
read_table()读取固定宽度文件的一种常用变体,其中使用空白字符来分隔各列。
read_log()读取Apache分隔的日子文件。

read_csv()函数第一个参数为读取文件的路径
默认使用数据的第一行作为列名称
可使用skip = 你来跳过前面几行
使用comment = “#” 丢弃所有以#开头的行
没有列名事,使用col_names = FALSE, 就不会将第一行作为列名,而是将各列依次标注为x1至xn。
“\n"可用于添加新行
col_names可用于传递字符向量,以用作列名
选项na:设定使用哪个值或者哪些值表示文件中的缺失值

解析向量函数:
parse_*()函数,接受一个字符向量,并返回一个特定向量,如逻辑,整数或者日期向量。
第一个参数为需要解析的向量
选项na:设定使用哪个值或者哪些值表示文件中的缺失值
解析失败的值在输出值中以缺失值形式输出
如果缺失值很多,那么应该用problem()函数来获取完整的失败信息集合。该函数会返回一个tibble,可以用dplyr包来进行处理。
解析函数的常用类型:
parse_logical()逻辑值解析
parse_integer()整数解析
parse_double()严格的数值解析函数
parse_number()灵活的数值型解析函数
parse_character()字符编码
parse_factor()创建因子
parse_datetime(), parse_date(), parse_time() 解析不同类型的日期和时间


数值解析:
数值格式,有三种问题比较棘手:
1. 书写方式不同
2. 有其他表示特殊意义的字符,如¥
3. 数值包含分组,如1000,000

readr有"locale"的概念,这是一个指定解析选项的对象,因地域而不同。当解析数字时,最关键的是小数点,我们可以创建一个locale来改变解析:
parse_double("1.23")#> [1] 1.23parse_double("1,23", locale = locale(decimal_mark = ","))#> [1] 1.23

parse_number()解决第二个问题,它会忽略非数字字符。
parse_number("$100")#> [1] 100parse_number("20%")#> [1] 20parse_number("It cost $123.45")#> [1] 123

parse_number以及选项组合解决数值分组问题。
# Used in many parts of Europeparse_number("123.456.789", locale = locale(grouping_mark = "."))#> [1] 1.23e+08# Used in Switzerlandparse_number("123'456'789", locale = locale(grouping_mark = "'"))#> [1] 1.23e+08

字符串解析
parse_character()
charToRaw() 获取字符串的底层表示—(十六进制)
guess_encoding(): 找出编码方式,第一个参数既可以是文件路径,也可以原始向量

因子
R使用因子代表已知值集合的分类变量,parse_factor() 函数的levels参数被赋予一个一直向量,只要存在向量中没有的值,就会生成一条警告。
fruit <- c("apple", "banana")parse_factor(c("apple", "banana", "bananana"), levels = fruit)#> Warning: 1 parsing failure.#> row # A tibble: 1 x 4 col     row   col expected           actual   expected   <int> <int> <chr>              <chr>    actual 1     3    NA value in level set bananana#> [1] apple  banana <NA>  #> attr(,"problems")#> # A tibble: 1 x 4#>     row   col expected           actual  #>   <int> <int> <chr>              <chr>   #> 1     3    NA value in level set bananana#> Levels: apple banana


日期,日期时间与时间
parse_datetime()处理ISO 8601标准的日期时间
parse_datetime("2010-10-01T2010")#> [1] "2010-10-01 20:10:00 UTC"# If time is omitted, it will be set to midnightparse_datetime("20101010")#> [1] "2010-10-10 UTC"

parse_date()
parse_date("2010-10-01")#> [1] "2010-10-01"

parse_time()
library(hms)parse_time("01:10 am")#> 01:10:00parse_time("20:10:01")#> 20:10:01

解析文件

策略:
readr使用启发式的方法搞明白每一列的数据类型:它开始读入前1000行并使用一些(相当保守)启发式方法弄明白数据的类型。你可以使用guess_parser()模仿这一个过程,它会返回readr最好的猜测:
guess_parser("2010-10-01")#> [1] "date"guess_parser("15:01")#> [1] "time"guess_parser(c("TRUE", "FALSE"))#> [1] "logical"guess_parser(c("1", "5", "9"))#> [1] "integer"guess_parser(c("12,352,561"))#> [1] "number"str(parse_guess("2010-10-10"))#>  Date[1:1], format: "2010-10-10"

  • logical: contains only “F”, “T”, “FALSE”, or “TRUE”.
  • integer: contains only numeric characters (and -).
  • double: contains only valid doubles (including numbers like 4.5e-5).
  • number: contains valid doubles with the grouping mark inside.
  • time: matches the default time_format.
  • date: matches the default date_format.
  • date-time: any ISO8601 date.

写入文件
write_csv()write_tsv()用来将数据写入磁盘。

最重要的参数是第一个指定数据框,第二个指定文件路径。
write_csv(challenge, "challenge.csv")

但是保存为CSV文件时,数据类型就会丢失,每次加载时都需要套重建列的类型。因此,可以采用下面两种替代方式:

write_rds()
read_rds()

它们是readRDS()saveRDS()函数更通用的形式,将数据转换为R二进制文件RDS格式,保存数据所有信息。
feather包使用了一个更快的二进制文件格式,可以在不同编程语言直接分享和使用。

其他数据类型

haven 读入SPSS, Stata,和SAS文件。
readxl 读入excel文件 (.xls.xlsx).
DBI,用于后台 (e.g. RMySQL, RSQLite, RPostgreSQL etc) allows you to run SQL queries against a database and return a data frame.







上一篇:各位前辈,求助一个perl脚本?
下一篇:小洁详解《R数据科学》--第十五章 向量(下)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2019-4-24 09:17 , Processed in 0.028968 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.