|
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.
|
|