《统计建模与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时数据间隔字符。