R(08):第二章:2.7读、写数据文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/genome_denovo/article/details/82228530

《统计建模与R软件》薛毅

第2章 R软件的使用

总结:读取文本格式的文件,read.table()函数,其中header=FALSE,表示文本格式的第一行不是表头,如果header=TRUE表示文本格式的第一行默认是表头,读取后的文本为data.frame;同时也可以读取其他格式的文件;R不能够直接读取Excel表格文件,可以将Excel表转化成“文本文件(制表符分隔)”,然后用函数read.delim()读取文本文件,也可以将Excel转化成“CSV(逗号分隔)”文件,用函数read.csv()读取该csv格式文件;write.table()函数和write.csv()函数是将data.frame写入文件,write.table()函数写入文本文件,write.csv()函数写入csv格式文件。

2.7 读、写数据文件

2.7.1 读纯文本文件

读纯文本文件由两个函数,一个是read.table()函数,另一个是scan()函数。

1. read.table()函数

该函数是读表格形式的文件,如果读到的纯文本文件是对应行列的,该文件的第一行为变量名,第一列为记录序号;则可利用read.table()函数读取数据,用法如下:
R_read_rable.txt文件的内容为:
52.00 111.0 830 5 6.2 no
57.50 128.9 710 5 7.5 yes

注意:文件的最后一行必须有换行符,不然会报incomplete final line found by readTableHeader这个错误
> rt <- read.table("/Users/XXX/Desktop/R_read_rable.txt", header=FALSE) #这个文件没有表头,所以header设定为header=FALSE
> rt #每一列自动进行命名,每一行则用序号表示
V1 V2 V3 V4 V5 V6
1 52.0 111.0 830 5 6.2 no
2 57.5 128.9 710 5 7.5 yes
也可以判断输出的rt是否是数据框格式
> is.data.frame(rt)
[1] TRUE
如果文件存在表头则可以设定header=TRUE
read.table()的使用格式为
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)
可以输入help(read.table)查看具体用法
其中file是读入数据的文件名;header=TRUE表示所读数据的第一行为变量名,否则(默认值)第一行作为数据;sep是数据分隔的字符,通常用空格作为分隔符;skip表示读数据时跳过的行数。

2. scan()函数

该函数可以直接读纯文本文件数据,例如
scan()需要’a real’, 而不是’no’

2.7.2 读其他格式的数据文件

R语言也可以读取其他格式文件,例如:Minitab,S-PLUS,SAS,SPSS等,要读入其他格式数据库,必须先调入“foreign”模块,它不属于R等内在模块,需要在使用前调入。
> library(foreign)

1. 读SPSS、SAS、S-PLUS、Stata数据文件

这四种数据文件等存储格式为:
SPSS数据文件(”educ_scores.sav”)
SAS数据文件(”educ_scores.xpt”)
S-PLUS数据文件(”educ_scores”)
Stata数据文件(”educ_scores.dta”)
读SPSS文件的格式为
> rs <- read.spss("educ_scores.sav")
其变量rs时一个列表,如果打算形成数据框,则命令格式为:
> rs <- read.spss("educ_scores.sav", to.data.frame=TRUE)
读SAS文件的格式为,其变量rx时一个数据框:
> rx <- read.xport("educ_scores.xpt")
读S-PLUS文件的格式为,其变量rs时一个数据框:
> rs <- read.S("educ_scores")
读Stata文件的格式为,其变量rd时一个数据框:
> rd <- read.dta("educ_scores.dta")

2. 读Excel数据文件

如果将上述数据存为Excel格式,但R软件无法直接读Excel表,需要将Excel表转化成气体格式,然后R才能读取。
第一种方法,可以将Excel表转化成“文本文件(制表符分隔)”,然后用函数read.delim()读取文本文件,例如:
> rd <- read.delim('R_read_table.txt', head=FALSE); rd
V1 V2 V3 V4 V5 V6 V7
1 52.0 111.0 830 5 6.2 no 2880
2 57.5 128.9 710 5 7.5 yes NA
第二种方法,将Excel转化成“CSV(逗号分隔)”文件,用函数read.csv()读取该csv格式文件。
> rc <- read.csv('R_read_table.csv')

2.7.3 链接嵌入的数据库

R提供多种数据库和软件包,可用data()函数调用这些数据库和软件包。
> data() #当在对话框当中输入时,会显示能够载入的库的名字
命令,列出在基本软件包(base)中所有可以利用的数据集,如果需要装载某一个数据集,只需要在括号中加入相应的名字,例如:
> data(infert)
如果需要从其他的软件包链接数据库,可以使用参数package,例如:
> data(package='nls')
> data(Puromycin,package='nls')
如果一个软件包已经被library附在库中,则这个数据库将自动地被包含在其中,例如:

2.7.4 写数据文件

1. write()函数

write()函数写数据文件的格式为:
write(x, file = “data”, ncolumns = if(is.character(x)) 1 else 5, append = FALSE, sep = ” “)
其中x是数据库,通常是矩阵,也可以是向量;file是文件名(默认时文件名为“data”);append=TRUE时,在原文件上添加数据,否则(FALSE,默认值)写一个新文件。

2. write.table()函数和write.csv()函数

对于列表数据或数据框数据,可以用write.table()函数或write.csv()函数写纯文本格式的数据文件,或CSV格式的Excel数据文件,例如:
> df <- data.frame(Name=c('Alice','James','Becka','Jeffrey','John'), sex=c('F','F','M','M','M'), Age=c(13,13,12,13,12), Height=c(56.5,65.3,57.3,62.5,59.0),Weight=c(84.0,98.0,83.0,84.0,99.5))
> write.table(df, file='/Users/zhounan/Desktop/R_write_table.txt') #注意:输出的数字是纯数字,输出的字符串带有双引号
> write.csv(df, file='/Users/zhounan/Desktop/R_write_table.csv') #该格式文件可用Excel表格打开
write.table()函数和write.csv()函数的使用格式为:
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.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double"), fileEncoding = "")
其中x是对象;file是文件名;append=TRUE时,在原文件上添加数据,否则(FALSE,默认值)写一个新文件;sep时数据间隔字符。

猜你喜欢

转载自blog.csdn.net/genome_denovo/article/details/82228530