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

news2025/7/9 18:38:31

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)

运行结果如下:

image-20221115155113636

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

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

image-20221115154513670

  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)

结果如下:

image-20221115160643656

可以看到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)

结果如下:

image-20221115164245576

注意:文件的最后一行需要保留一个空行,不然会有警告。警告可以忽略,程序仍可以正常运行,但是为了美观,最好保留一个空行。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)

结果为:

image-20221115170816866

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

image-20221115170940063

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:

image-20221115173734776

读取代码如下:

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

运行结果如下:

image-20221115173844499

二、文件和目录操作

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

1、工作目录

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

程序例子如下:

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

结果如下:

image-20221115183725398

2、判断是否存在

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

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

image-20221115184411591

程序例子如下:

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'))

结果如下:

image-20221115184329856

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文件
# 上述采用的是相对路径,都只会在当前工作目录下创建

结果如下:

image-20221115191025959

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

image-20221115191109285

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

结果如下:

image-20221115191628490

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

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

结果如下:

image-20221115192705301

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

image-20221115192827731

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

结果如下:

image-20221115193805282

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

image-20221115193847474

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() # 遍历当前目录下的所有目录

结果如下:

image-20221115201332642

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Carla安装记录

Carla安装记录 最近打算在做一些自动驾驶相关的东西,所以安装了一下Carla。在这里记录一些自己的安装过程中遇到的一些问题和解决的方法。 Carla release版本下载 想要安装Carla,可以选择release版本或者源码安装。在这里我主要介绍release版本的安装…

Vue3、vite项目页面自适应配置(postcss-plugin-px2rem、amfe-flexible)

文章目录前言:vite 如何处理 csspostcss项目配置下载相关包配置方案一方案二(备选方案)相关资料链接前言:vite 如何处理 css vite 天生就支持对css文件的直接处理 关于预处理器 ☀️目前,在工程化开发中,使…

AcWing-C/C++语法基础【合集2】

5.字符串 每个常用字符都对应一个-128~127的数字 ,二者之间可以相互转化: (int)97 , (char)a 常用ASCII值:’A’-‘Z’ 是65~90,’a’-‘z’是97-122,’0’-‘9’是 48-57 字符可以参与运算,运算时会将其当…

2022年11月编程排行榜

2022年11月Tiobe编程排行榜已更新,研一的生涯也快结束,来看一下本月各大编程语言有何新进展: 目录:11月编程排行榜一、榜单情况二、榜单简单的分析一、榜单情况 这里只展示排名靠前的前15名: TOP 10编程语言TIOBE指数…

播放视频出现错误代码0xc00d36c4如何修复?

相信很多用户都遇到过视频无法播放的问题。比如将重要视频从旧电脑拷到U盘上,使用另一台电脑播放时,提示视频播放错误代码0xc00d36c4,不支持该视频播放。 其实,视频无法播放的问题是很常见的,不少用户将相机或者手机上…

机器学习的初学术语掌握

机器学习:让一个模型能够通过数据调优自己,后续的数据可以通过模型获得更贴近真实的结论数据集:也叫样本,可以简单理解为一个个对象构建成的集合训练样本:构建的数据集中的一部分被拿来训练模型的子集标记:…

计算机网络面试题

1. TCP建⽴连接的过程。 三次握⼿: 1. 第⼀次握⼿(客户端发送syn包到服务器端):客户端发送syn包到服务器端,进⼊syn_send状态,等待服务器端的确认; 2. 第⼆次握⼿(服务器返回synack包给客户端):服务器端…

Js逆向教程-08跟值技巧

Js逆向教程-08跟值技巧 一、加密函数最有可能出现在哪里? 一般不会出现在jquery成熟的第3仓库里面。 jquery是封装好的成熟的第3仓库,一般不会去修改它。 因为如果jquery版本提升了,还要去改jquery。 一般会出现在自己写的js代码中&#x…

LabVIEW性能和内存管理 3

LabVIEW性能和内存管理 3 本文介绍LabVIEW性能和内存管理的几个建议3。 显示缓冲区分配。 “显示缓冲区分配”工具位于工具>配置文件>显示缓冲区分配 In Place优化例程。对波形数组的每个元素进行操作 下面是如何使用ShowBuffer allocation工具提高性能的示例。从层次…

HashMap的面试题

目录 1、底层数据结构 1.7和1.8有何不同 2、为什么用红黑树,为何不一上来就树化,树化阈值为何是8,何时会树化,何时会退化为链表 3、索引如何计算?hashCode都有了,为何还要提供hash()方法?数组…

综合实验——高级网络应用检测

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 综合实验 实验要求 三层交换机配置 三层交换机一 三层交换机…

教程详解从照片到倾斜摄影模型、影像地形点云的成果输出,网页端Web发布展示

一、数据获取 需要自己在下面网址中下载相应数据,获取the island of Torbjrnskjr,下载后,共计200张带pos的jpg照片,存储到纯英文目录下 国外Sensefly共享的航拍数据 包括数据原片、分辨率介绍、覆盖范围,飞行高度、照…

Linux-实操篇8-shell脚本编写

一、shell是什么 二、shell脚本如何执行 2.1 新建一个shell脚本 ## 第一步新建一个shell脚本 vim aaa.sh ## 内容如下,#!/bin/bash 表示shell脚本的执行协议,必须要写 #!/bin/bash echo "hello word!!!"2.2 执行方式 方式一:先给…

R语言中的函数19:openxlsx::read.xlsx(), write.xlsx(), writeData(), writeDataTable()

文章目录read.xlsx()函数介绍实例writeData()和writeDataTable()函数介绍实例write.xlsx()函数介绍实例read.xlsx()函数介绍 read.xlsx(xlsxFile,sheet,startRow 1,colNames TRUE,rowNames FALSE,detectDates FALSE,skipEmptyRows TRUE,skipEmptyCols TRUE,rows NULL,c…

Oracle技术分享 卸载grid软件

如果grid软件安装失败,可能需要重新安装,这时候紧紧删除软件是解决不了问题的,还需要删除grid的配置信息,需要安装软件的原因各式各样。 1 资源无法启动。 2 root.sh执行失败。 1 如果执行root.sh失败,可以删除&#x…

相似度系列8:unify-BARTSCORE: Evaluating Generated Text as Text Generation

BARTSCORE: Evaluating Generated Text as Text Generation 这篇文章是用生成模型解决问题,根据生成模型中输入和输出的差别,代表不同的评测方面。 不足:针对不同的任务选择bart score的输入和输出?different input and output co…

Allegro 172版本自动放置层叠

Allegro 172版本自动放置层叠 Allegro 172版本支持自动放置层叠,无需手动绘制,效果如下图 具体操作步骤如下 选择Manufacture-选择Cross Section Chart命令 会出现一个对话框 常用参数介绍如下 Chart Unit 是层叠单位 Maximun Chart height 是层叠的高度 X-Scale Factor…

预约挂号项目之预约挂号模块

目录一、预约挂号详情1、需求分析2、api接口2.1 、controller代码:2.2 、Service类接口:2.3 、添加service接口实现:学习指南: https://www.zhihu.com/question/351439302/answer/2362637429?utm_id0 一、预约挂号详情 1、需求…

[数据结构]链表OJ题 (三) 链表的中间结点、链表中倒数第k个结点、合并两个有序链表、链表分割、链表的回文结构

作者: 华丞臧. 专栏:【数据结构】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章目录一、链表的中间结点题目描述…

Python学习笔记(十六)——Numpy

Numpy NumPy(Numerical Python的简称)是高性能科学计算和数据分析的基础包, 其中包含了数组对象(向量、矩阵、图像等)以及线性代数等。 NumPy库主要功能 • ndarray(数组)是具有矢量算术运算和复杂广播能力的多维数组。 • 具有用于对数组数…