文件的读入和写出

文件读入

读取有分隔符的文本文件:

1.read.table()函数及其衍生函数
usage:
read.table(file, header = FALSE, sep = "", quote = ""'",
dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names, col.names, as.is = !stringsAsFactors,
na.strings = "NA", colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

read.csv(file, header = TRUE, sep = ",", quote = """,
dec = ".", fill = TRUE, comment.char = "", ...)#指定的分割符为“comma”

read.csv2(file, header = TRUE, sep = ";", quote = """,
dec = ",", fill = TRUE, comment.char = "", ...)#指定的分割符为";"

read.delim(file, header = TRUE, sep = "\t", quote = """,
dec = ".", fill = TRUE, comment.char = "", ...)#指定的分割符为"\t"

read.delim2(file, header = TRUE, sep = "\t", quote = """,
dec = ",", fill = TRUE, comment.char = "", ...)#指定的分割符为"\t"

arguments:
file :需要读入的文件,要指定其详细路径
header:逻辑值,默认为FALSE,一般情况下需要指定为TRUE,这样才有列名
sep:指定列与列之间的分隔方式,在read.table中可以任意指定( ,\t)
quote:指定用于包绕字符型数据的字符,默认为“\ ”
dec:用于指明文件中小数的小数点
row.names:该参数用于指定行名,是一个向量,可以使用row.names = NULL强制行进行编号。
col.names:指定列名的向量。缺省情况下是又"V"加上列序构成,即V1,V2,V3......
as.is:该参数用于确定read.table()函数读取字符型数据时是否转换为因子型变量。当其取值为FALSE时,该函数将把字符型数据转换为因子型数据,取值为TRUE时,仍将其保留为字符型数据
na.strings:用于指定缺失数据的值,以转换为NA。
colClasses:用于指定列所属类的字符串向量。
nrows:整型数。用于指定从文件中读取的最大行数。负数或其它无效值将会被忽略。
skip:整型数。读取数据时忽略的行数。
comment.char:字符型。包含单个字符或空字符的向量。代表注释字符的开始字符。可以使用""关闭注释。

2.扩展包中的两个常用函数:作用相似,但是运行速度更快,默认将stringAaFactor设置为FALSE

  • read_delim()系列函数:来自readr包
    Read a delimited file (including csv & tsv) into a tibble
    Usage
    read_delim(file, delim, quote = """, escape_backslash = FALSE,
    escape_double = TRUE, col_names = TRUE, col_types = NULL,
    locale = default_locale(), na = c("", "NA"), quoted_na = TRUE,
    comment = "", trim_ws = FALSE, skip = 0, n_max = Inf,
    guess_max = min(1000, n_max), progress = show_progress(),
    skip_empty_rows = TRUE)

后边这些函数是更具read_delim()函数,分别指定了delim参数为(, ; \t),且这些分隔符不能修改
read_csv(file, col_names = TRUE, col_types = NULL,
locale = default_locale(), na = c("", "NA"), quoted_na = TRUE,
quote = """, comment = "", trim_ws = TRUE, skip = 0,
n_max = Inf, guess_max = min(1000, n_max),
progress = show_progress(), skip_empty_rows = TRUE)
read_csv2(file, col_names = TRUE, col_types = NULL,
locale = default_locale(), na = c("", "NA"), quoted_na = TRUE,
quote = """, comment = "", trim_ws = TRUE, skip = 0,
n_max = Inf, guess_max = min(1000, n_max),
progress = show_progress(), skip_empty_rows = TRUE)
read_tsv(file, col_names = TRUE, col_types = NULL,
locale = default_locale(), na = c("", "NA"), quoted_na = TRUE,
quote = """, comment = "", trim_ws = TRUE, skip = 0,
n_max = Inf, guess_max = min(1000, n_max),
progress = show_progress(), skip_empty_rows = TRUE)
返回值:tibble。

  • fread()函数:来自data.table包,它读取文件的速度更快也更方便(因为很多信息不需 要指定,该函数会在文件中自动获取)
    usage :Fast and friendly file finagler
    fread(input, file, text, cmd, sep="auto", sep2="auto", dec=".", quote=""",
    nrows=Inf, header="auto",
    na.strings=getOption("datatable.na.strings","NA"), # due to change to ""; see NEWS
    stringsAsFactors=FALSE, verbose=getOption("datatable.verbose", FALSE),
    skip="auto", select=NULL, drop=NULL, colClasses=NULL,
    integer64=getOption("datatable.integer64", "integer64"),
    col.names,
    check.names=FALSE, encoding="unknown",
    strip.white=TRUE, fill=FALSE, blank.lines.skip=FALSE,
    key=NULL, index=NULL,
    showProgress=getOption("datatable.showProgress", interactive()),
    data.table=getOption("datatable.fread.datatable", TRUE),
    nThread=getDTthreads(verbose),
    logical01=getOption("datatable.logical01", FALSE), # due to change to TRUE; see NEWS
    keepLeadingZeros = getOption("datatable.keepLeadingZeros", FALSE),
    yaml=FALSE, autostart=NA, tmpdir=tempdir())
    返回值:data.table

读取无分隔的文本文件——逐行读取

usage:从文件中读取部分或全部文本行。
readLines(con = stdin(), n = -1L, ok = TRUE, warn = TRUE,
encoding = "unknown", skipNul = FALSE)
con :待读取的文件的连接或者详细的路径
n:要读取的最大行数,-1L表示完全读取
encoding:一般设置为"utf-8",该参数在读取数据的格式乱码时使用

txt <- readLines(con = "/Users/pedagogoose/Desktop/读取文件.txt",n = -1,encoding = "utf-8")

length(txt)
返回值:原来的文本的每一行是一个字符串,所有的行组成可一个向量。可以用length()函数查看其长度(元素的个数)。

读取excel表格文件

  • 先将其转换为csv文件之后再用read.csv系列函数读取
  • 使用readxl包中的read_excel()系列函数
    usage:读取Excel文件
    read_excel(path, sheet = NULL, range = NULL, col_names = TRUE,
    col_types = NULL, na = "", trim_ws = TRUE, skip = 0,
    n_max = Inf, guess_max = min(1000, n_max),
    progress = readxl_progress(), .name_repair = "unique")
    path:文件的路径
    sheet:读取哪一个分面,NULL表示读取全部(可以中分面的编号也可以指定名字)
    返回值:tibble类型的数据框
iris1 <- cbind(iris[,5],iris[,1:4])
write.table(x =iris1,file = "IRIS.xls",sep = "\t",row.names = TRUE)
library(readxl)
IRIS <- read_excel(path = "/Users/pedagogoose/Desktop/工作簿1.xlsx",sheet =1,col_names =TRUE)

返回值:tibble数据结构

读取其它统计软件的文件

需要使用foreign包中的系列函数:
可以使用read.spss()、read.dta()、read.ssd()等分别用于读取spss、stata和sas的文件,但是都用的很少,其返回值为data.frame格式
也可以使用haven包中的read_spss、read_sas、read_stata函数,其返回值为tibble数据类型。

读取R中的内置数据集:data()函数

直接使用data()函数,会返回当前系统中所有的内置数据集及其存在的包,其数据类型为一个list,一共有四个组件,在result组件中可以看到其具体的数据集和对应的包。
关于data()函数本身:
usage:Loads specified data sets, or list the available data sets.
data(..., list = character(), package = NULL, lib.loc = NULL,
verbose = getOption("verbose"), envir = .GlobalEnv,
overwrite = TRUE)
arguments:
主要就是...:表示数据集的名字
packages:表示数据集所在的包

data(iris)
data(diamonds,package  = "ggplot2")

R专用数据.Rdata——是R直接可用的二进制文件,多用与同行间交流。

文件写出

使用write.table()系列函数

usage:
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
eol = "\n", na = "NA", dec = ".", row.names = TRUE,
col.names = TRUE, qmethod = c("escape", "double"),
fileEncoding = "")
write.csv()#默认分隔符为逗号
write.csv2()#默认分隔符为“;”
x:需要导出的数据
file:导出的文件路径,要写完文件名及其后缀
sep:分隔符,默认为空格(” “),也就是以空格为分割列
row.names:是否导出行序号,默认为TRUE,也就是导出行序号
col.names:是否导出列名,默认为TRUE,也就是导出列名
quote:字符串是否使用引号表示,默认为TRUE,也就是使用引号表示;如果给该参数传入数值型向量(表示列数),则会对其代表的列中的元素加引号。
append:逻辑值,默认为FALSE,表示是用现有的内容覆盖文件中原有的内容。(仅在x是字符串类型时有用)
eol:要在每行(行)末尾打印的字符。例如,eol=“\r\n”将在类似于Unix的操作系统上生成Windows的行尾,eol=“\r”将按Excel:mac 2004的预期生成文件。

writeLines()函数,是readLines()函数的逆函数

该函数用于将文件写出为一个无分隔形式的文本文件
writeLines(text, con = stdout(), sep = "\n", useBytes = FALSE)

使用write()函数

write():Write Data to a File
usage :
write(x, file = "data",
ncolumns = if(is.character(x)) 1 else 5,
append = FALSE, sep = " ")
arguments:
x:表示要写出的数据,通常是一个vector
file:文件的路径和文件名
ncolumns:输出的文件的列数,默认为1或者5
append:是否将输出结果追加到原来的文件中
sep:指定文本内容的分隔符;如tab,comma,空格等

使用cat()函数:

使用save()函数:

save:可以用与保存R中的任何东西为任何形式的文件
save(..., list = character(),
file = stop("'file' must be specified"),
ascii = FALSE, version = NULL, envir = parent.frame(),
compress = isTRUE(!ascii), compression_level,
eval.promises = TRUE, precheck = TRUE)

save.image(file = ".RData", version = NULL, ascii = FALSE,
compress = !ascii, safe = TRUE)
arguments:
...:表示一个待保存的对象的名称
list:一个包含要保存的对象名称的字符向量。
file:连接或保存数据的文件的名称。必须是保存的文件名。
save.image(无任何参数)只是“保存我当前工作空间”的捷径。

你可能感兴趣的:(文件的读入和写出)