本文需要用到readr包
library(tidyverse)
library(hms)
概述
- read_csv()读取逗号分隔;read_csv2()读取分号分隔;
- read_tsv()读取tab分隔;
- read_delim()读取任意分隔;
- read_fwf()读取固定宽度文件;
- read_log()读取Apache的log文件;
readr::read_csv相比base::read.csv的好处:
- 速度更快,10倍速,大文件时有进度条;
- 直接创建tibble,不会自动转换字符串为因子;
- 更有可重复性(不同操作系统之间);
解析函数
parse_*() 能够将字符串向量解析为特殊类型向量
str(parse_logical(c("TRUE", "FALSE", "NA")))
## logi [1:3] TRUE FALSE NA
str(parse_integer(c("1", "2", "3")))
## int [1:3] 1 2 3
str(parse_date(c("2010-01-01", "1979-10-14")))
## Date[1:2], format: "2010-01-01" "1979-10-14"
第一个参数为被解析对象;第二个参数为什么应该被解析为NA
parse_integer(c("1", "231", ".", "456"), na = ".")
## [1] 1 231 NA 456
- parse_logical/parse_integer()
- parse_double/parse_number()
数字
解决三个问题:
- 国家不同导致小数点符号不同;
- 数字中有特殊字符;
- 有分组标记;
对于第一个问题,使用local解决
parse_double("1,23", locale = locale(decimal_mark = ","))
## [1] 1.23
对于第二个问题,parse会忽略特殊字符
parse_number("$100")
## [1] 100
#> [1] 100
parse_number("20%")
## [1] 20
#> [1] 20
parse_number("It cost $123.45")
## [1] 123.45
#> [1] 123
对于第三个问题,parse会忽略分组符
parse_number("$123,456,789")
## [1] 123456789
#> [1] 1.23e+08
字符串
ASCII编码
charToRaw("Hadley")
## [1] 48 61 64 6c 65 79
readr中默认使用UTF-8编码字符串
如果要指定特殊编码,使用parse_character()
x2 <- "\x82\xb1\x82\xf1\x82\xc9\x82\xbf\x82\xcd"
parse_character(x2, locale = locale(encoding = "Shift-JIS"))
## [1] "こんにちは"
因子
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("2010-10-01T2010")
## [1] "2010-10-01 20:10:00 UTC"
parse_datetime("20101010")
## [1] "2010-10-10 UTC"
parse_date("2010-10-01")
## [1] "2010-10-01"
parse_time("01:10 am")
## 01:10:00
#> 01:10:00
parse_time("20:10:01")
## 20:10:01
#> 20:10:01
特殊格式
parse_date("01/02/15", "%m/%d/%y")
## [1] "2015-01-02"
#> [1] "2015-01-02"
parse_date("01/02/15", "%d/%m/%y")
## [1] "2015-02-01"
#> [1] "2015-02-01"
parse_date("01/02/15", "%y/%m/%d")
## [1] "2001-02-15"
#> [1] "2001-02-15"
- %Y 4位解析年份
- %y 2位解析年份
- %m 2位解析月份
- %b “Jan”
- %B “January”
- %d 2位解析日期
- %H 0-23小时
写出文件
- write_csv()
- write_tsv()
write_excel_csv()
- readxl包读取excel文件
- DBI包读取数据库文件
- jsonlite包读取json文件
xml2包读取XML文件