R语言七天入门教程六:文件相关操作

一、文件的读写

R 语言作为统计学编程语言,常常需要处理大量数据,而这些数据通常会从文件中进行读取,因此文件读写在R语言中是非常重要的操作。在R语言中,用到最多的文件格式是csv文件。

1、文本文件
  1. 文本文件也就是txt文件,按行读取用readLines函数,函数声明如下:
readLines(con = stdin(), n = -1L, ok = TRUE, warn = TRUE, encoding = "unknown", skipNul = FALSE)

con参数用于指定文件路径,n用于指定一共读取多少行,encoding指定编码格式。

例如,文本文件file.txt内容如下:

This a txt file.
"Hello world" is the second line.
This is the end of the file.

读取的代码如下所示:

file1 = readLines('file.txt') # 读取所有行
print(file1)
file2 = readLines('file.txt',n=2) # 读取前2行
print(file2)

运行结果如下:

注意:file.txt应该放在当前的工作目录(working directory)下,在R语言中可以通过getwd()函数来查看当前的工作目录,setwd()函数来设置当前的工作目录。这里传入的文件路径’file.txt’是相对路径,只会在当前工作目录下查找。关于相对路径和绝对路径,简单理解就是:相对路径是文件相对于当前目录的路径,绝对路径是文件在操作系统中完整的文件路径。更多内容,可以参考相对路径和绝对路径。

在R Studio中,我们可以通过如下方式来快速在当前目录新建文本文件,填写相关内容后,保存为file.txt即可:

  1. 与之对应的,写入txt文件使用writeLines()函数,其函数声明如下:
writeLines(text, con = stdout(), sep = "\n", useBytes = FALSE)

text参数用于指定要写入的内容,con指定写入文件的路径,sep参数指定每行结束后的分隔符。'\n’是转义字符,含义是换行符。对于转义字符,简单理解为就是带有右划线的字符,右划线和它后面的字符会被解释为一个新的特殊字符。例如,\n表示换行,\r表示回车。更多内容,可参考字符串转义字符。

程序例子如下:

writeLines('Write a new line in file.txt', 'file.txt')
# 写入新内容之后,重新读取并查看file.txt的内容
file = readLines('file.txt') # 读取所有行
print(file)

结果如下:

可以看到writeLines()函数是覆盖写入,新的内容会覆盖旧的内容。

2、csv文件
  1. csv文件本质上也是文本文件,每一行数据的不同列用分隔符(例如,逗号,分号,空格等)分隔。可以通过函数read.table()read.csv()read.csv2()读取,读取结果均以数据框格式存储。他们的区别主要在于默认的分隔符不同,read.csv中默认的分隔符为逗号,read.table中默认的分隔符为空格,read.csv2中默认的分隔符为分号;。也可以通过指定sep参数改变默认的分隔符,因而这几个函数之间可以相互替代使用。此外,这三个函数也可以用于读取Table格式的文本文件。这三个函数的参数非常多,我们重点关注如下几个即可。
参数名 含义
file 要读取的文件
header 是否将文件的第一行作为列名,对于read.csv()read.csv2()默认为TRUE,read.table()默认为FALSE
sep 文件中不同列的分隔符
row.names 每一行的名称,应为向量
col.names 每一列的名称,应为向量
nrows 最多读取多少行

例如,有如下txt文件file.txt:

1 lisan man 18
2 liyier man 19
3 liyiersan man 20

如下csv文件file.csv:

id,keyword,url
1,baidu,www.baidu.com
2,tencent,www.tencent.com
3,google,www.google.com

程序例子如下:

data_frame1 = read.table('file.txt',col.names=c('id','name','sex','age'))
data_frame2 = read.csv('file.csv',nrows=3) # header不计入nrows
print(data_frame1)
print(data_frame2)

结果如下:

注意:文件的最后一行需要保留一个空行,不然会有警告。警告可以忽略,程序仍可以正常运行,但是为了美观,最好保留一个空行。file.txt中最后有空行,所以无警告信息。

  1. 由于读取到的是一个数据框类型,所以可以对读取到的数据进行修改,查询等操作。也可以将更新后的数据框保存到新的文件中,对应函数是 write.table()write.csv()write.csv2()。参数含义如下:
参数名 含义
x 待写入的内容,通常为数据框或者矩阵
file 待写入的文件
append 是否以追加的形式写入,默认为FALSE。追加就是添加到新文件的末尾,否则就是覆盖写入。
quote 字符串类型和因子数据是否用“”括起来,默认为TRUE
sep 每一列的分隔符
eol 每一行的结尾字符
row.names 是否存储行名,默认为TRUE,在保存时,我们通常不希望存储行名
col.names 是否存储列名,默认为TRUE,在保存时,我们通常存储列名

程序例子如下:

data_frame = read.csv('file.csv')
print(data_frame)
# 添加新的第4行数据
# 数据框的每一行依旧是数据框,所以添加时,要传入一个子数据框
data_frame[4,] = data.frame(4,'alibaba','www.alibaba.com.cn')
write.csv(data_frame,'file.csv',row.names=FALSE) # 不存储行名
# 写入完成后,重新读取csv文件查看内容
data_frame = read.csv('file.csv')
print(data_frame)

结果为:

此时,用记事本打开file.csv文件发现,字符串数据都被""括起来了。

3、Excel文件

R语言读写excel文件需要下载xlsx库,由于excel文件中的 xls和xlsx格式,可以直接转换为csv格式,所以可以直接通过 CSV 与 R 交互,没必要再使用 Excel。

安装xlsx库,应使用install.packages()函数,代码如下:

# 先安装Rtools,再安装xlsx
install.packages('installr', repos = "https://mirrors.ustc.edu.cn/CRAN/")
library(installr) # 导入installr库
install.Rtools() # 使用installr安装Rtools
install.packages("xlsx", repos = "https://mirrors.ustc.edu.cn/CRAN/")

repos参数用于指定下载镜像,此处使用中科大的镜像。

安装完成之后,对于excel文件file.xlsx:

读取代码如下:

library("xlsx") # 先导入库
data = read.xlsx("file.xlsx", sheetIndex = 1) # 读取一个xlsx文件,sheetIndex是工作簿序号
print(data)

运行结果如下:

二、文件和目录操作

在编码时,常常需要对文件和目录进行操作,例如,复制、移动、重命名等。常用的函数如下:

1、工作目录

工作目录(working directory)通常是当前项目所在位置,可以使用getwd()函数查看工作目录,使用setwd()设置目录。

程序例子如下:

getwd()
setwd('C:/Users/alex/Documents') # 设置工作目录为:C:/Users/alex/Documents
getwd() # 查看更改后的工作目录

结果如下:

2、判断是否存在

dir.exists()file.exists()函数分别用于判断目录和文件是否存在。传入的参数可以是单一路径,也可以是一个向量,用于批量判断文件是否存在。

例如,当前工作目录为C:/Users/alex/Desktop/R demos,目录中文件如下:

程序例子如下:

dir.exists('test') # 判断当前工作目录下是否存在子目录test1
# 判断当前电脑中是否存在绝对目录C:/Users/alex/Documents,和当前工作目录下是否存在子目录test2
dir.exists(c('C:/Users/alex/Documents','test2'))
# 判断当前工作目录下是否存在文件file.txt
file.exists('file.txt')
# 判断C:/Users/alex/Desktop/R demos目录下是否存在文件file.csv,和工作目录下是否存在文件file.xlsx
file.exists(c('C:/Users/alex/Desktop/R demos/file.csv','file.xlsx'))

结果如下:

3、新建

dir.create()函数用于新建目录,声明如下:

dir.create(path, showWarnings = TRUE, recursive = FALSE, mode = "0777")

各参数含义如下(重点关注path和recursive这两个参数即可):

path参数用于指定新建的目录的路径,可以是一个字符串。

recursive参数用于指定是否创建多级目录,默认为FALSE,即只新建path中的第一级子目录,而当recursive为TRUE时,可以新建多级子目录。

当目录已存在时不会新建目录覆盖原先的目录,此时如果showWarnings为TRUE,则会提醒该目录已存在,为FALSE时不会提醒。

mode用于指定目录的权限,可参考Linux权限详解。

file.create()函数用于新建文件,如果创建成功,会返回TRUE,否则返回FALSE,声明如下:

file.create(..., showWarnings = TRUE)

程序例子如下:

dir.create('test_dir/test_subdir', recursive = TRUE) # 创建多级目录
dir.create('test1') # 创建目录test1
file.create(c('new_file1.txt', 'new_file2.txt')) # 创建两个txt文件
# 上述采用的是相对路径,都只会在当前工作目录下创建

结果如下:

此时,查看工作目录,会发现多了两个目录和新文件:

4、重命名

file.rename()用于重命名文件或目录,也具有返回值(TRUE/FALSE),函数声明如下:

file.rename(from, to)

from参数是原始文件(目录)名,to是新文件(目录)名,二者可以是向量,但是长度需相同。

程序例子如下:

file.rename('file.txt','new_file.txt') # 将文件file.txt重命名为new_file.txt
file.rename(from='test1',to='new_test1') # 将目录test1重命名为new_test1

结果如下:

此时,查看工作目录,会发现文件和目录名称发生了变化:

5、删除

file.remove()函数用于删除文件(有返回值),unlink()函数可以用来删除文件或目录,函数声明如下:

file.remove(...)
unlink(x, recursive = FALSE, force = FALSE, expand = TRUE)

x是要删除的文件或目录,可以是向量(即批量删除);当删除目录时,recursive应为TRUE,表示目录内文件和子目录一并删除;force表示是否强制删除。

程序例子如下:

file.remove('file.xlsx', 'new_file.txt') # 删除文件file.xlsx和文件new_file.txt
unlinke('test_dir', recursive = TRUE) # 删除目录test_dir

结果如下:

此时查看工作目录,可以发现相应文件和目录已经被删除:

6、复制

file.copy()函数用于复制文件或目录,同样具有返回值,其声明如下:

file.copy(from, to, overwrite = recursive, recursive = FALSE, copy.mode = TRUE, copy.date = FALSE)

各参数含义如下(重点关注前四个参数即可):
from是原始文件(目录)名,to是新文件(目录)名,二者可以是向量,但是长度需相同;

overwrite 表示是否覆盖文件,默认与recursive值一致,若为TRUE,则文件被覆盖;

recursive 表示是否复制目录下的文件和子目录,复制目录时recursive需为TRUE;

copy.mode表示是否复制文件权限信息,默认为TRUE;

copy.date表示是否复制文件日期信息,默认为FALSE。

程序例子如下:

file.copy('file.csv','new_test1')  # 将file.csv文件复制到new_test1目录
dir.create('new_test2') # 新建目录new_test2
file.copy('new_test1','new_test2', recursive=TRUE) # 将目录new_test1复制到new_test2

结果如下:

此时查看工作目录,如下:

7、遍历

如果我们要列出一个目录下的所有文件和目录,可以使用list.files()函数,如果只需要列出子目录,可以使用list.dirs()函数。list.files()函数有个别名是dir()dir()list.files()用法完全一样。函数声明如下:

list.files(path = ".", pattern = NULL, all.files = FALSE,full.names = FALSE, recursive = FALSE,ignore.case = FALSE, include.dirs = FALSE, no.. = FALSE)
list.dirs(path = ".", full.names = TRUE, recursive = TRUE)

各参数含义如下:

参数名 含义
path 用于指定路径,默认为’.',.是相对路径表示法中当前目录的意思,即getwd()得到的路径
pattern 是正则表达式,若pattern不为NULL,返回文件(目录)名满足该正则表达式的文件(目录)
all.files 默认为FLASE,若为FALSE则不显示隐藏文件(目录),若为TRUE则返回所有文件(目录)
full.names 默认为FLASE,若为FALSE则只返回文件(目录)名,若为TRUE则返回文件(目录)路径
recursive 表示是否递归遍历,即是否遍历子目录下的文件和目录,默认为FLASE
ignore.case 若为TRUE则在匹配pattern时不区分大小写
include.dirs 在recursive为TURE时,若include.dirs为FALSE则只列出最终端的文件名,而不列出中间层级的目录名
no… 若为TRUE,则不显示“.”和“…”

程序例子如下:

dir(recursive=TRUE) # 递归遍历当前目录
list.dirs() # 遍历当前目录下的所有目录

结果如下:

R语言七天入门教程六:文件相关操作相关推荐

  1. R语言七天入门教程二:认识变量与运算符

    R语言七天入门教程二:认识变量与运算符 一.什么是变量 1.变量 顾名思义,我们可以将变量理解为"可以改变的量",是计算机语言中能储存计算结果或能表示值的抽象概念.这里的值可以是数 ...

  2. R语言七天入门教程三:学习基本结构

    R语言七天入门教程三:学习基本结构 一.编程的语言的基本结构 1.三种基本结构 绝大多数编程语言,都有三种最基本的程序结构:顺序结构.分支结构.循环结构.这三种结构的流程图如下所示(从左至右依次为:顺 ...

  3. R语言七天入门教程五:认识并使用函数

    R语言七天入门教程五:认识并使用函数 一.什么是函数 在编程语言中,如果有一段代码需要在多次重复使用,除了复制粘贴外,还可以将其写成一个函数.函数可以很方便地实现代码复用,对于复杂的程序功能,可以将其 ...

  4. R语言七天入门教程一:配置运行环境

    R语言七天入门教程一:配置运行环境 一.R语言介绍 1.R语言是什么? 参考:R语言教程-R语言介绍 R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析.绘图.数据挖掘.R语言有丰富的 ...

  5. Python入门教程之文件读写操作知识

    Python是随着人工智能时代的来临而火爆起来的编程语言,入门简单.功能强大,吸引了人们的广泛学习加入.想要学好Python,一定要从基础学起,然后进阶深入学习,今天千锋小编就给大家分享Python培 ...

  6. R语言 零基础入门教程第11章 Rattle可视化数据挖掘工具(1)Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料 本章内容 Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例 本章目标 了解Rattle的安装及 ...

  7. (生物信息学)R语言与统计学入门(七)—— 一元线性回归分析

    我们之前讲过相关性分析,生物信息学常见的相关性分析是pearson相关和spearman相关. (生物信息学)R语言与统计学入门(六)-- Pearson和Spearman相关性分析_Lijingxi ...

  8. 大数据分析R语言tidyverse数据清洗工具教程

    凌乱的数据集无处不在.如果要分析数据,不可避免地需要清理数据.在大数据分析R语言tidyverse数据清洗工具教程中,我们将研究如何使用R和一些漂亮的tidyverse工具来做到这一点. 该tidyv ...

  9. R语言时间序列ARIMA新手教程

    R语言时间序列ARIMA新手教程 首先说一下ARMA回归的底层逻辑,所谓的AR模型和MA模型都是ARMA模型的一种特殊情况,有点类似正方形和长方形都是矩形.ARMA模型的表达式为: p为自回归部分的滞 ...

最新文章

  1. Java高并发编程:原子类
  2. [ZZ]如何在Web页面上直接打开、编辑、创建Office文档
  3. 理论加实践,终于把时间序列预测ARIMA模型讲明白了
  4. 登录多实例MySQL失败,修改密码临时解决,原因不明
  5. cURL在Web渗透测试中的应用
  6. Android官方开发文档Training系列课程中文版:分享文件之配置文件共享
  7. 云原生时代微服务的高可用架构设计
  8. 数据结构函与算法之函数与递归
  9. C# 二进制数据、图片存入、读出 sql server 数据库
  10. 为ASP.NET MVC Client-side Resource Combine 添加中文支持
  11. Luogu2774 方格取数问题
  12. 医院耗材管理系统开发_8
  13. C#使用VS2019打包安装程序(图标修改和默认安装路径修改)
  14. android gif图片压缩,10种GIF压缩方法
  15. 高等数学复习之空间解析几何
  16. sop流程图模板_SOP模板
  17. android 获取声音资源,Android从视频中提取出音频
  18. linux 笔记本 显卡驱动,archlinux 笔记本安装nvidia显卡驱动与intel显卡驱动
  19. 星球日报 | Huobi Prime 首期项目 TOP “中签率”2%,开盘暴涨 27 倍
  20. 新手小白如何选择吉他,初学者的入门吉他推荐

热门文章

  1. 用友U8案例教程采购报表
  2. ubuntu home目录下的主用户目录被删处理
  3. 通达信dll接口怎么开发?
  4. 解决ubuntu Certificate verification failed: The certificate is NOT trusted.
  5. asp源码爱好者福利,asp调用微信扫一扫代码,用asp写的调用微信内置扫一扫功能源码下载
  6. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第32讲:PHP 构造方法、析构方法
  7. windows开启自启动jar包
  8. Access2003和Access2007数据库
  9. 计算机网络设备装配调试员高级,计算机及外部设备装配调试员
  10. 用于React和Preact的小而快的选色器组件 - react-colorful