- 实验目的:
- 掌握R对数据文件的读、写操作;
- 了解R基础包中的数据集及相关的操作。
实验内容:
读取纯文本文件。在R语言基础包中,有两个函数可以使用:
read.table()函数(包括read.csv()函数)
只能读取表格形式的文本文件。
函数返回值的对象类型是数据框。
若文本文件有行表头且没有表示序号的列表头,需要加上参数header=T。
scan()函数,scan()比read.table()读取文件的形式要更加丰富
scan()可以读取只有一个属性(变量)的数据,从而用来创建向量。如:
x <- scan("math.data", what=double(0))
创建了一个数值向量。文件math.data中存放的是若干同学的数学成绩。由于成绩是数值类型,而what参数默认是double型,因此,可以这里可以把参数what省略。如果要读取的文件是一个文本文件,则应设参数what="",告知函数读取的是字符类型。
scan()可以通过指定变量的类型,读取有多个属性的数据,可以用来创建不同的对象,如矩阵,数据框,列表等。例如:
mydata <- scan("data.dat", what = list("", 0, 0))
创建了一个列表。文件data.dat中有1个字符、2个数值共三个变量,因此,此时参数what是一个列表,告知函数读取的第一个元素是字符类型(""),后两个元素是数值类型(对应两个0)。
scan()若不输入文件名,则可以直接屏幕读取用户输入的数据
注:对于文件读取和写入,R默认是从当前系统的工作目录进行。因此,当要读写的文件不在当前系统的工作目录中时,在使用这两个函数中参数file(表示要读取的文件)时,需要注意以下几点(以C:\myfile\myfile.txt文件为例):
参数file必须带上文件的路径。可以是绝对路径或者相对路径。
如果不想在参数file中带上文件的路径,有两种方法:使用命令getwd() 找到当前工作目录,将要读写的文件放在此目录下;或者使用命令setwd("C:\myfile") 将要读写的文件所在的目录作为当前工作目录。这样在读写文件时,参数file只需要写文件名即可,即"myfile.txt"。
使用file.choose()函数。如read.table(file.choose(), header=T)。在运行代码时,此函数时弹出对话框,让用户选择打开要读写文件的目录,然后选择目标文件。强烈推荐使用此种方法,免去了记忆和书写文件路径的麻烦,特别是能够避免因数据文件位置移动带来的错误!
根据以下小题中的数据特点,选用上述函数完成练习,并将代码和运行结果截图粘贴于每小题之下的空行。
先将下面数据表中的数据写成一个纯文本文件(方法不限),并以student.txt为文件名保存在合适的目录中,然后读取该文件并赋值给变量stu,展示变量stu并用class()函数查看变量stu是R中的哪一种数据结构?
学生数据
|----|----|----|----|------|------|
| 序号 | 姓名 | 性别 | 年龄 | 身高cm | 体重kg |
| 1 | 张三 | 女 | 14 | 156 | 42.0 |
| 2 | 李四 | 男 | 15 | 165 | 49.0 |
| 3 | 王五 | 女 | 16 | 157 | 41.5 |
| 4 | 赵六 | 男 | 14 | 162 | 52.0 |
| 5 | 丁一 | 女 | 15 | 159 | 45.5 |
- 实验目的:
- 掌握R对数据文件的读、写操作;
- 了解R基础包中的数据集及相关的操作。
数据"birth.data"存放了某地100名新生儿的体重数据,读取此数据并赋值给变量w,展示变量w并用class()函数查看变量w是R中的哪一种数据结构?
数据"h_w.data"存放了某地100名学生的身高、体重数据(此数据中奇数列是身高数据,偶数列是体重数据),读取此数据时,要求将其中身高数据赋予变量height,体重数据赋予变量weight,并将读取结果赋值给变量hw,展示变量hw并用class()函数查看变量hw是R中的哪一种数据结构?
在命令行模式中,利用scan()手工录入以下5个学号:12、15、16、18、47,并赋予变量x。
在命令行模式中,利用scan()手工录入以下5个姓名:钱二、孙三、周四、吴五、郑六,并赋予变量y。
将x和y合并成一个名为df_xy数据框。
用scan()函数读下列数据(不能采用读取文件的方式),并将它们放在列表animals中。
1 dog 3
2 cat 5
3 duck 7
提示:利用scan()函数的what参数。
读取Excel文件。在R语言基础包中,虽然没有函数能直接读取Excel文件,但还是有办法处理:
间接方法:先转换成下面两个格式,再利用两个读取文本文件的函数读取
转换成文本文件
转换成csv文件(本质上也是文本文件)
直接方法:利用第三方程序包,如
利用readxl 包中的 reade_excel() 函数(既可以读 .xls 也可以读.xlsx 类型文件)
利用openxlsx 包中的 read.xlsx() 函数(仅可以读取 .xlsx 类型文件)
此练习自行完成,不需要截图粘贴于此。
数据写入纯文本文件。在R语言基础包中,可以使用write()函数。注意,此函数可能会改变原来数据的格式。完成以下练习:
wx <- matrix(1:12, ncol=6)
write(wx, file= "wx.data")
比较矩阵wx和文件wx.data的格式是否一样?
不一样
数据写入表格形式的文本文件。在R语言基础包中,可以使用write.table()函数或write.csv()函数,两个函数的区别主要是写入文件后列与列之间的分隔符不同。完成以下练习:
对第1题中的第6 )小题的数据框df_xy
用函数write.table()将此数据框以xy.txt为文件名保存在D盘根目录下。(若不显示行表头,设置参数row.name=F,可自行比较此参数取T和F时的效果)
row.name=F时
用函数write.csv()将此数据框以xy.csv为文件名保存在D盘根目录下。
R基础包中提供了100多个数据集,为学习R提供了典型的真实数据案例(第三方程序包中在提供相关函数的同时有些也会提供相应的数据集供学习)。在R中,
data()函数可以查看基础包中内置的所有数据集。
data(数据集的名字)可以加载基础包中对应名字的数据集。
再输入数据集名字就可以查看该数据集的所有数据。如果是第三方程序包的数据集,相应的命令格式为
data(package="第三方程序包名")
data(第三方程序包中的某个数据集名, package="第三方程序包名")
练习:
查看R基础包中的所有数据集。
加载R基础包中的mtcars数据集。
查看mtcars数据集中所有数据(展示了32辆汽车在11个指标上的数据)。
head(mtcars),仅显示数据集mtcars中前6个观测值。
tail(mtcars),仅显示数据集mtcars中后6个观测值。
names(mtcars),仅显示数据集mtcars中的变量.
思考:(以下运算类型的题目请先进行笔算后,再在R中运算核对)
read.table()的返回值是什么对象类型?
数据框
对于单属性的文本文件,scan()函数返回值是什么对象类型?对于多属性的文本文件,scan()函数返回值是什么对象类型?
对于单属性的文本文件,函数返回的是一个包含该属性值的向量。向量类型取决于属性值的类型。
对于多属性的文本文件,函数返回的是一个矩阵或数据框对象,其中每列对应一个属性。矩阵或数据框的列可以具有不同的数据类型,取决于各个属性的类型。
如果想显示某数据集中的前10行数据,应该怎么修改head()的参数?
head([数据集名],n=10)
如果想显示某数据集中的后10行数据,应该怎么修改tail()的参数?
tail([数据集名],n=10)