readr包提供了一些在R中读写文本数据的函数。
读取文件
read_csv()
读取逗号分隔文件
read_csv2()
读取分号分隔文件
read_tsv()
读取制表符分隔文件
read_delim()
读取使用任意分隔符的文件
read_fwf()
读取固定宽度的文件
由于这些函数具有类似的语法,这里以read_csv()
为例做介绍。
读取外部文件
1
| heights <- read_csv("data/heights.csv")
|
当运行read_csv()
时,它会打印一份数据列说明,给出每个列的名称和类型。
读取行内文件
read_csv()
函数都使用数据的第一行作为列名称。
1 2 3
| read_csv("a,b,c 1,2,3 4,5,6")
|
1 2 3 4 5
| # A tibble: 2 x 3 a b c <dbl> <dbl> <dbl> 1 1 2 3 2 4 5 6
|
开头元数据处理
有时文件开头会有好几行元数据。你可以使用skip = n
来跳过前n行;或者使用comment = "#"
来丢弃所有以#
开头的行:
1 2 3 4
| read_csv("The first line of metadata The second line of metadata x,y,z 1,2,3", skip = 2)
|
1 2 3 4
| # A tibble: 1 x 3 x y z <dbl> <dbl> <dbl> 1 1 2 3
|
1 2 3
| read_csv("# A comment I want to skip x,y,z 1,2,3", comment = "#")
|
1 2 3 4
| # A tibble: 1 x 3 x y z <dbl> <dbl> <dbl> 1 1 2 3
|
数据没有列名称
我们可以使用col_names = FALSE
来使得read_csv()
不要将第一行作为列标题,而是将各列依次标注为X1至Xn:
1
| read_csv("1,2,3\n4,5,6", col_names = FALSE)
|
1 2 3 4 5
| # A tibble: 2 x 3 X1 X2 X3 <dbl> <dbl> <dbl> 1 1 2 3 2 4 5 6
|
我们也可以向col_names
传递一个字符向量,以用作列名称:
1
| read_csv("1,2,3\n4,5,6", col_names = c("x", "y", "z"))
|
1 2 3 4 5
| # A tibble: 2 x 3 x y z <dbl> <dbl> <dbl> 1 1 2 3 2 4 5 6
|
写入文件
write_csv()
:写入csv文件
write_tsv()
:写入tsv文件
这两个函数输出的文件能够顺利读取的概率更高,因为:
- 它们总是使用UTF-8对字符串进行编码;
- 它们使用ISO 8601格式来保存日期和日期时间数据,以便这些数据不论在何种环境下都更容易解析。
1
| write_csv(challenge, "challenge-2.csv")
|
《R数据科学》学习笔记