实验指导:
65.1 实验目的
学习R语言读写txt和csv文件的方法。
65.2 实验要求
掌握R语言读写txt和csv文件的方法。
65.3 实验原理
R语言支持读写多种数据格式的文件,包括txt,csv,excel,xml,json等。但是读写excel等文件需要安装第三方的库,而最常操作的文件其实是txt和csv格式的文件,并且对于这两种文件的读写不需要安装其它的库,因为这已经集成到R的基础环境里了。在本次实验中,我们将学习读写txt和csv文件的方法。
实际上,无论是txt还是csv文件都是属于普通的文本文件,对于文本文件,我们可以使用read.table和read.csv函数进行读取,其区别是read.table函数常用来读取以空白字符为分隔符的文本,而read.csv常用来读取以逗号为分隔符的文本。但是两个函数都可以通过设置参数sep来指定分隔符。使用help函数可以查看详细的参数列表。保存数据到外部可以通过write.table和write.csv两个函数。下面我们将介绍这四个函数主要的参数和用法。
65.3.1 read.table函数
read.table用来读取以表格格式存储的文本文件。其用法如下:
read.table(file)
常用参数解释:
file: string类型,表示要读取的文件名,可以是绝对路径或者相对路径,但需要注意的是在R语言中‘\’是转义符,所以路径分隔符必须写成’\\’或‘/’。如果使用相对路径,可以使用getwd()函数查看当前工作目录,也可以通过setwd(dir)函数设置工作目录。
header: boolean类型,默认False,表示是否把文件第一行作为标题(表头)。
sep: 指定分隔符,默认是空格。
quote: 指定引用符号,默认为引号。
dec: 小数点的表示,默认为’.’。
na.strings: 缺失值(NA值)的表示,默认为”NA”。
skip: int类型,指定要忽略的某一行。
strip.white: boolean类型,默认为FALSE,是否忽略头尾的空白字符。
blank.lines.skip: boolean类型,默认为TRUE,是否忽略空白行。
comment.char: 指定注释字符,默认为”#”。
此函数将会返回一个数据帧对象。
65.3.2 read.csv函数
read.csv的用法与read.table几乎一样,对于read.table的支持的参数,read.csv也支持,区别是read.csv默认分隔符为逗号,而且默认有表头,即header=TRUE。
65.3.3 write.table函数
保存数据到外部文件可以使用write.talbe函数,用法如下:
write.table(x, file="")
常用参数解释:
x: 要保存的对象,通常为一个矩阵或数据帧对象,否则会尝试进行强制转换为数据帧对象再进行保存。
file: 要保存的文件名或打开的一个连接,默认的""表示输出到屏幕。
append: boolean类型,默认False,表示是否为追加模式,只有保存的文件名已存在时有效。
sep: 指定分隔符,默认是空格。
quote: boolean类型,默认为TRUE,表示是否使用引号包围内容。
dec: 小数点的表示,默认为’.’。
na: 缺失值(NA值)的表示,默认为”NA”。
eol: 行结束符,默认为’\n’。
65.3.4 write.csv函数
保存对象为csv格式时使用此方法。
65.4 实验步骤
65.4.1 编写读取txt文件测试程序
启动实验后,登录master服务器,先在目录"/root"下创建一个本地文件1.txt,使用vi编辑器打开并输入以下内容:
1 6 a 2 7 b 3 8 c 4 9 d 5 10 e
键入完成后,保存退出。
然后使用vi编辑器编写R语言读取txt文件测试程序readtxt.R,在vi编辑器中键入如下代码:
#!/usr/bin/env Rscript df = read.table(file="/root/1.txt") print(df)
键入完成后,保存退出。
这里我们使用read.table方法来读取一个文本文件,如果读取成功,该方法将返回一个data.frame对象。
65.4.2 运行读取txt文件测试程序
在master服务器上执行如下命令,运行R语言读取txt文件测试程序。
Rscript readtxt.R
65.4.3 编写写入txt文件测试程序
编写写入txt文件测试程序writetxt.R,在vi编辑器中键入如下代码:
#!/usr/bin/env Rscript # 先读取数据 df = read.table(file="/root/1.txt") # 修改数据 df[1]=999 # 保存数据到2.txt write.table(df,file="/root/2.txt",quote=FALSE)
键入完成后,保存退出。
这里先读取1.txt文件到df,然后把df的第一列数据全部更改为999,然后保存到"/root/2.txt"中。保存可以使用write.table方法,该方法有一个默认参数quote=TRUE,意为保存的时候每个数据将会带上双引号,通过设置该参数为FALSE可以去掉双引号。
65.4.4 运行写入txt文件测试程序并查看所保存的文件内容
在master服务器上执行如下命令,运行R语言写入txt文件测试程序并查看所保存的文件内容。
Rscript writetxt.R && cat 2.txt
65.4.5 编写读取csv文件测试程序
其实csv文件与txt文件一样,都是文本文件,只是csv文件里面的内容是以逗号分隔的,为了方便读取这种格式的文本,R语言提供了read.csv方法。
同样地,我们在目录"/root/"下新建一个1.csv文件,使用vi编辑器打开并输入以下内容:
Col1,Col2,Col3 1,2,3 4,5,6 7,8,9 a,b,c
键入完成后,保存退出。
然后使用vi编辑器编写读取csv文件测试程序readcsv.R,在vi编辑器中键入如下代码:
#!/usr/bin/env Rscript df2=read.csv("/root/1.csv") print(df2)
键入完成后,保存退出。
65.4.6 运行读取csv文件测试程序
在master服务器上执行如下命令,运行R语言读取csv文件测试程序。
Rscript readcsv.R
65.4.7 编写写入csv文件测试程序
使用vi编辑器编写写入csv文件测试程序writecsv.R,在vi编辑器中键入如下代码:
#!/usr/bin/env Rscript df2=read.csv("/root/1.csv") df2['Col1']=100 write.csv(df2,file="/root/2.csv",quote=FALSE,row.names=FALSE)
键入完成后,保存退出。
对于data.frame对象,我们可以通过指定列名来索引数据,这里我们将名为"Col"的列数据全更改为100。最后,保存更改后的结果到 2.csv文件,参数row.names设置为FALSE是为了在保存数据的时候不保存行名。
65.4.8 运行写入csv文件测试程序并查看所保存的文件内容
在master服务器上执行如下命令,运行R语言写入csv文件测试程序并查看所保存的文件内容。
Rscript writecsv.R && cat 2.csv
65.5 实验结果
65.5.1 读取txt文件测试程序运行结果
读取txt文件测试程序运行结果输出如下所示:
图65-1 readtxt.R运行结果
65.5.2 写入txt文件测试程序运行结果
写入txt文件测试程序并查看所保存的文件内容结果输出如下所示:
图65-2 writetxt.R运行结果
65.5.3 读取csv文件测试程序运行结果
读取csv文件测试程序运行结果输出如下所示:
图65-3 readcsv.R运行结果
65.5.4 写入csv文件测试程序运行结果
写入csv文件测试程序运行结果如下所示:
图65-4 writecsv.R运行结果
实验操作:
步骤1:使用R语言读取txt文件
步骤2:使用R语言写入txt文件
#!/usr/bin/env Rscript # 先读取数据 df = read.table(file="/root/1.txt") # 修改数据 df[1]=999 # 保存数据到2.txt write.table(df,file="/root/2.txt",quote=FALSE)
步骤3:使用R语言读取csv文件
步骤4:使用R语言写入csv文件