Contents

R语言之数据读写

1.读数据

R语言的读写有read.csv(), read.table(), fread()。经过测试读写速度为fread() > read.table() > read.csv()fread()速度快的原因是其在底层使用多核并行读取。

代码示例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# read.csv
mydata <- read.csv("data.csv", header = T, stringsAsFactors = FALSE, check.names = FALSE) 

# read.table
mydata <- read.table("data.csv", header = T, sep=",", quote="\"", skipNul=TRUE, 
                      stringsAsFactors=FALSE, comment.char="")

# fread
# select表示要读取的列的向量,可以是下标,也可以是列名
library(data.table)
mydata <- fread("data.csv", header = TRUE, select=c(1, 2, 3))

可以通过文件指针来对超大文件进行分批读取

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
con = file("data.csv", "w")
# 读取列名
col.name <- read.table(con, header = FALSE, sep=",", quote="\"", skipNul=TRUE, 
                       stringsAsFactors=FALSE, nrows = 1)
# 分10次读取,每次读取1000000行
for i in range(10) {
    df <- read.csv(con, header = FALSE, sep=",", quote="\"", skipNul=TRUE, stringsAsFactors=FALSE, 
                   comment.char="", nrows = num)
    if(nrow(df) == 0) {
    break
  }
}
close(con)

读数据函数中的各项含义为:

  • header:第一行是否为列名
  • sep:数据的分隔符。默认情况为“""
  • quote:用于指定包围字符型数据的字符。
  • nrows:从文件中读取的最大行数。
  • skip:读取数据时忽略的行数。
  • encoding:字符串的编码方式
  • stringsAsFactors:是否将字符向量转换为因子。
  • comment.char:逻辑值。该参数值设置为TRUE时,数据框中的变量名将会被检查。
  • check.names:逻辑值。该参数值设置为TRUE时,数据框中的变量名将会被检查。
  • skipNul:是否忽略空值,默认为FALSE。

2.写数据

RDS文件是以R本机格式存储R对象,相比于其他格式文件,二进制更紧凑,读写速度快。也可以将多个对象以 RData 格式保存到一个单一的文件。其读写如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# RDS文件的读取与写入
df <- reasRDS(data.rds)
# RDS 格式中写入单个数据对象
saveRDS(df,filename)

# RData文件保存与载入
# 将多个对象以 RData 格式保存到一个单一的文件
df1 <- df 
save(df, df1, file="data.RData")
# load() 载入数据,R 会自动使用该数据原来的对象名称,在本例中,会自动载入df与df1
load("data.RData")

除此之外,还可以将文件写如为csv, txt等格式,这里以写入csv格式为例,进行示范。

1
2
3
# row.names = FALSE 不显示行名
# na = "" 替代 “NA”,输出空格
write.csv(data, "data.csv", row.names = FALSE, na = "")

3.参考

  1. https://openbiox.github.io/Cookbook-for-R-Chinese/section-5.html