如何使用R批量处理文件

2023-05-16

免责声明:运行下面的代码可能会对你的电脑和文件造成不可恢复的损害,请确认明白代码的意义后再运行! 本主对代码运行后果不负任何责任。

1 基本函数

1.1 文件操作函数

这类函数很多,下面列出的是基本安装包(base)中的一些:

ls("package:base", pattern="^file\\.")
##  [1] "file.access"  "file.append"  "file.choose"  "file.copy"   
##  [5] "file.create"  "file.exists"  "file.info"    "file.link"   
##  [9] "file.mode"    "file.mtime"   "file.path"    "file.remove" 
## [13] "file.rename"  "file.show"    "file.size"    "file.symlink"

常用的有:

  • file.exists:检查文件是否存在
  • file.copy:文件拷贝
  • file.remove:文件删除
  • file.rename:文件重命名
  • file.size:获取文件大小(B)
  • file.info:获取文件信息(包括文件大小),结果为列表或数据框
  • file.path:构造文件路径

但最常用的一个函数可能是list.files,此函数的作用是列出指定目录(路径)中的文件:

str(list.files)
## function (path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE, 
##     recursive = FALSE, ignore.case = FALSE, include.dirs = FALSE, 
##     no.. = FALSE)
  • path:文件路径,默认为“.”,即当前工作目录(getwd()获得)
  • pattern:文件名过滤模式,使用正则表达式
  • all.files:是否列出所有文件(含隐藏文件)
  • full.names:文件名是否以包含文件路径的“全名”形式表示
  • recursive:是否递归查找目录(查找子目录)
  • ignore.case:指定的模式(pattern参数)是否忽略大小写
  • include.dirs:是否包含目录名(多数系统认为“目录”也是“文件”)

1.2 字符(串)操作函数

这里仅介绍两个:gsub和strsplit。

我们将用gsub这个函数从文件名中提取需要的信息。它的用法是:

str(gsub)
## function (pattern, replacement, x, ignore.case = FALSE, perl = FALSE, 
##     fixed = FALSE, useBytes = FALSE)
  • pattern:查找模式,使用正则表达式
  • replacement:替换模式,可使用正则表达式
  • x:待处理的字符(串)向量
  • ignore.case:指定的模式(pattern参数)是否忽略大小写
  • fixed:模式(pattern参数)不使用正则表达式

strsplit的作用是使用指定分隔符切割字符串:

str(strsplit)
## function (x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)

它的结果是一个列表,如果应用于字符串向量,最好是结合apply函数使用:

xnames <- c("T-1-a", "T-2-b")
strsplit(xnames, "-")
## [[1]]
## [1] "T" "1" "a"
## 
## [[2]]
## [1] "T" "2" "b"
apply(cbind(xnames), 1, FUN = function(x) strsplit(x, "-")[[1]])
##      [,1] [,2]
## [1,] "T"  "T" 
## [2,] "1"  "2" 
## [3,] "a"  "b"

2 从文件名提取信息

可以使用strsplit函数。例如获取文件扩展名:

ffs <- list.files(pattern = "\\.")
apply(cbind(ffs), 1, FUN = function(x) rev(strsplit(x, "\\.")[[1]])[1])

当然也可以使用gsub函数:

gsub("^.+\\.([^\\.]+$)", "\\1", ffs)

想要从文件名中提取出有用信息,首先文件名中得存在有用信息,而这得取决于你的文件命名习惯。如果你是做科学的人,建议文件名中包含样品、重复、时间等信息。使用一定的规则命名文件,这在后期数据处理中非常有用。

3 批量重命名文件

基本过程是:

  • 用list.files函数获取原文件名
  • 构造新文件名
  • 用file.rename重命名文件

下面代码把当前目录下的Temp子目录下的txt文件用编号进行重命名:

ffo <- list.files(path="Temp", pattern = "\\.txt", full.names = TRUE)
if ( length(ffo) > 0) {
    ffn <- paste0(1:length(ffo), ".txt")
    ffn <- file.path("Temp", ffn)
    file.rename(ffo, ffn)
}

下面的代码把当前目录下的文件名的扩展名转成大写:

ffo <- list.files(pattern = "\\..+$")
fs1 <- gsub("^(.+\\.)([^\\.]+$)", "\\1", ffo)
fs2 <- gsub("^(.+\\.)([^\\.]+$)", "\\2", ffo)
ffn <- paste0(fs1, toupper(fs2))
file.rename(ffo, ffn)

4 批量选择和删除文件

可根据文件信息选择文件,然后再删除。这时候file.info函数就很有用了:

xsel <- file.info(ffs)$size < 10
if (sum(xsel) > 0) file.remove(ffs[xsel])

5 批量读取文件数据

通常使用for循环进行读取,例如:

dtx <- NULL
for (ff in ffs) dtx <- cbind(dtx, read.csv(ff))
colnames(dtx) <- ffs

但这同样取决于你的文件和数据。文件名的命名要讲究规律,存储格式也要标准化!如果做不到这一点,请不要说你在做科学。


作者: ZGUANG@LZU

Created: 2018-10-24 三 10:29

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用R批量处理文件 的相关文章

  • 八数码的几种做法的总结以及是否有解的判断

    经典的八数码问题 xff0c 这几天尝试了一些不同的做法 xff0c 现在总结下 1 广搜 43 哈希 这是最容易想到的一种做法 xff0c 哈希的方法是康托展开 xff0c 组合数学上有介绍 广搜 43 哈希 2 双向广搜 43 哈希 双
  • 【python】修改pip程序默认源为清华源

    一行代码实现pip源更换为清华源 Python原来的镜像源在国内速度非常慢 xff0c 因此直接将全局pip的源改为国内清华源 xff0c 将下列代码复制到cmd中 xff0c 运行即可 pip config set global inde
  • Mybatis+PageHelper自己手动写分页后,sql语句最后仍然自动加上了limit解决方案

    问题 xff1a 由于mysql查询语句涉及到多表联查 xff0c 因此自带的PageHelper分页返回的数目会不对 xff0c 需要自行分页 自行分页没有使用PageHelper start 后发现sql语句最后一行仍然自动加上了lim
  • 数据查询举例

    1 查询LIU老师所授课程的课程号和课程名 select cno cname from c where teacher 61 39 LIU 39 2 查询年龄大于23岁的男生的学号和姓名 select sno sname from s wh
  • swift对接整合ceph

    基本原理科普 xff1a ceph对象存储组件radosgw原生支持swift接口 xff0c 对接只是把openstack的权限认证配置到ceph里 xff0c 创建endpoint时指向ceph rgw地址就可以了 我们要做两件事儿 第
  • openstack octavia部署 ussuri U版

    注 xff1a 1 octavia源码下载地址 xff1a cd home git clone https a href http github com openstack octavia git github com openstack
  • 【Java中 任意几个数字获取其所有的排列组合】

    今天在工作中碰到一个问题 xff0c 在java 中输入比如1 2 3 三个数 我想要得到其所有的排列组合 比如 123 312 132 231 213 321 这些 上网找了找别人的算法 xff0c 稍加整理 xff0c 分享给大家代码
  • python-使用百度接口进行OCR

    1 先按照百度的接口模块 pip install baidu aip 要是速度慢的话 xff0c 直接使用清华源的安装方式 pip install i https pypi tuna tsinghua edu cn simple baidu
  • iOS UITableView cell自适应内容高度

    定义UITableView 并且遵守两个协议 firstTableView 61 UITableView alloc initWithFrame CGRectMake 0 64 kScreenWidth kScreenHeight 64 s
  • C++和python代码实现朗读文本的功能(附源代码)

    闲来无事 xff0c 平时就喜欢看看小说之类的 突发奇想 xff0c 好多小说软件上的听小说功能都是收费的 xff0c 咱们写个小程序读一读 xff0c 岂不是很哇塞 xff01 看了一些资料 xff0c 这里给大家分享出来 xff0c 已
  • linux 实现回收站功能

    话不多说 xff0c 直接代码 bin sh 创建回收站目录 MYRM 61 34 var tmp rm 34 if d MYRM then mkdir MYRM fi 移动文件到回收站 function mvFile filePath 6
  • Linux下的内网穿透+访问内网网站(利用阿里云)

    本人亲测 两台主机设置 xff1a 内网 xff1a 本地ubantu16 xff0c 外网 xff1a 阿里云centos7 4 xff08 点击购买一台阿里云实例 xff09 前提 xff1a 本地和阿里云 xff1a 关闭防火墙 xf
  • 来此加密增加对zerossl和buypass免费证书支持

    众所周知 xff0c 现在网站基本上都要开启HTTPS的访问 而目前提供免费的证书平台也越来越多 xff0c 其中Let 39 s Encrypt最为知名 xff0c 其提供了泛域名和多域名的证书申请 xff0c 给广大站长和企业节省了一大
  • buypass:可全民使用的免费六个月SSL证书

    一 缘起 自从Let 39 s Encrypt出圈以来 xff0c 由于其免费的特质深得大家的喜爱 随着大家广泛地使用 xff0c 对他的不满意也随之而来 一般来看不满意的有以下两点 xff1a 1 证书有效期比较短 2 域名数量限制 3
  • 关于Linux命令行环境下无线网卡的配置

    无线网卡的一种配置方法 xff0c 通过wpa supplicant并依据SSID及口令生成相关配置文件 xff0c 然后讲配置文件挂接进网卡的的配置即可 xff08 树莓派中也使用这种方法 xff09 当然也可以直接在interface无
  • 申请永久免费的域名SSL证书的方法

    现在主流都在推荐使用SSL证书 xff0c 部署了SSL证书能自动激活浏览器显示 锁 型标志 xff0c 我们可以在浏览器的地址栏看到 https 开头的网址 SSL证书意味着在客户端浏览器和Web服务器之间已建立起一条SSL安全加密通道
  • 免费域名证书最新申请方式大全

    目前市场环境下 xff0c 可获得域名SSL证书的方式有很多 xff0c 一般有付费和免费划分 对于想免费使用域名SSL证书的朋友 xff0c 这里收集整理了几个常用的SSL证书申请方式 对于SSL证书的用处 xff0c 简单的来说 xff
  • Let's Encrypt 在线证书申请:来此加密

    Let s Encrypt是国外一个公共的免费SSL项目 xff0c 由 Linux 基金会托管 xff0c 它的来头不小 xff0c 由Mozilla 思科 Akamai IdenTrust和EFF等组织发起 xff0c 目的就是向网站自
  • Setup Kubernetes on a Raspberry Pi Cluster easily the official way!

    转自 http blog hypriot com post setup kubernetes raspberry pi cluster Kubernetes shares the pole position with Docker in t
  • R语言网络分析1:BioC的graph图系

    BioC项目中 xff0c 网络图的处理通过不同的软件包进行 xff1a graph xff1a 图实现方法 类定义 xff08 graphNEL graphAM和graphBAM xff09 和基本函数RBGL xff1a 针对BioC

随机推荐

  • Doom-Emacs安装和基本使用方法

    1 Doom Emacs用前须知 Doom Emacs xff08 下面称为Doom xff09 是Emacs的一个比较复杂的配置包 xff0c 主要目的是使Emacs拥有Vim的出色编辑能力 xff0c 同时让新手配置起来相对容易些 但后
  • R语言网络分析2:graph函数和应用

    产生网络 自定义 BioC 中用得最多的网络类型可能是 graphNEL 类 使用 graphNEL 类的同名函数可以产生自定义网络 xff1a library graph str graphNEL gt function nodes 61
  • RAID扩容步骤

    以下为Debian系统的操作记录 xff0c DELL T630服务器 xff0c RAID5 xff0c 原有3块8T盘 xff0c 添加了2块8T新盘 xff0c 没有发生什么意外 1 添加硬盘 为保险起见 xff0c 关机后安装硬盘
  • R语言时间处理函数

    1 POSIXct和POSIXlt 把表示时间的字符串转成时间类型数据 xff0c 在R语言里面有两个基本的函数 xff1a as POSIXlt 和 as POSIXct 两者都是S3泛型函数 xff0c 根据参数的数据类型选择不同的转换
  • 时间序列分析:ts/mts基础数据类型

    时间序列是以时间为索引的数据 时间索引为等间距递增的时间序列称为规则时间序列 xff0c 其他为不规则时间序列 由于R语言核心组件的构建坚持以通用性为原则 xff0c 因此R的基础包中只定义了规则时间序列 xff0c 而不规则时间序列的定义
  • nginx+php+unoconv 失败?

    原因 xff1a web服务运行用户对自己的home目录没有写入权限 如果网站目录是通过fstab直接bind到 var www的 xff0c 要特别注意检查bind以后 var www目录的权限 xff08 服务器使用unoconv占用C
  • Emacs键盘练习方法

    Emacs里面什么都有 xff0c 比如俄罗斯方块游戏 xff08 tetris xff09 我要说的是 xff0c Emacs里的tetris这不只是个游戏 xff0c 它还是练习键盘的终极武器 玩这个游戏最常用的三个按键是左 右和上箭头
  • Qt中的各种编译器

    1 uic xff1a UI编译器 xff0c 将 ui文件转化为ui h文件 2 rcc xff1a 资源编译器 xff0c 将 qrc文件转换成qrc h文件 3 moc xff1a 元对象编译器 xff0c 将含有Q OBJECT的头
  • Bioconductor软件安装与升级

    本文已于2019 07 12按新版Bioconductor安装包BiocManager出现的问题进行更新 1 修改安装软件源 BioConductor安装需要下载很多文件 xff0c 如果不修改 xff0c 程序很可能是从国外网址下载 xf
  • 使用oligo软件包处理芯片数据

    本博客介绍过 Affy芯片的处理方法 xff0c 其中所使用的软件包有一定的局限性 xff0c 无法读取和分析一些新版Affy芯片 本文介绍oligo软件包的处理方法以解决这些问题 oligo软件包并不是新出现的软件包 xff0c 只因新类
  • R语言中的引号

    1 单引号和双引号 两者都可以用于表示字符串分隔 xff0c 用法和意义没有差别如果字符串包含有分隔符本身 xff0c 字符串内的分隔符引号需要转义 xff08 使用反斜杠 xff09 R语言字符串的打印 显示都是用双引号的形式表示 xff
  • ggplot2柱形图Y轴坐标扩展的简单方法

    ggplot2的坐标轴主要由映射aes确定 xff0c expand limits和coord cartesian虽然可以调整坐标轴刻度 xff0c 但对柱形图不大适用 不少使用者对扩展柱形图Y轴坐标很烦恼 xff0c 有人从源代码层面对开
  • Affy芯片ATH1-121501探针注释的处理

    Affy芯片ATH1 121501探针注释的处理 BioC有Affy芯片ATH1 121501 xff08 GPL198平台 xff09 的注释库文件 xff08 R包 xff09 xff0c 芯片分析后期处理经常要使用 xff0c 导出方
  • Debian Linux使用sun/oracle java

    1 下载Oracle JRE 从oracle 网站下载JRE源码 xff0c 如 jre 8u211 linux x64 tar gz xff0c 无需解压 2 构建JRE安装包 xff0c 并安装JRE 如果没有安装 java packa
  • NGINX + Let's encrypt免费SSL证书

    安装与配置过程不算复杂 xff1a 1 安装openssl和certbot sudo apt get install openssl ssl cert sudo apt get install python certbot nginx t
  • Emacs必修:使用dired管理文件

    1 基本设置 require 39 dired require 39 dired 43 require 39 dired sort ido mode 1 global dired hide details mode 1 setq dired
  • Emacs必修:缓冲区与ibuffer

    如果不太较真 xff0c 缓冲区可以当作是Emacs打开的文件 缓冲区操作就是对打开的文件进行保存 关闭和切换等操作 1 使用ibuffer代替list buffers defalias 39 list buffers 39 ibuffer
  • VNC+SSH的配置与使用(Debian xfce4)

    服务器端设置 安装vncserver xff1a sudo apt get install tightvncserver 配置桌面启动脚本文件 vnc xstartup xff0c 文件不存在则新建 xff0c 内容如下 xff1a bin
  • gcc 工作流程中的4个阶段(预处理、编译和优化、汇编和链接)

    GCC 编译器对程序的编译下图所示 xff0c 分为 4 个阶段 xff1a 预处理 xff08 预编译 xff09 编译和优化 汇编和链接 GCC 的编译器可以将这 4 个步骤合并成一个 预处理 xff1a 在这个阶段主要做了三件事 展开
  • 如何使用R批量处理文件

    免责声明 xff1a 运行下面的代码可能会对你的电脑和文件造成不可恢复的损害 xff0c 请确认明白代码的意义后再运行 xff01 本主对代码运行后果不负任何责任 1 基本函数 1 1 文件操作函数 这类函数很多 xff0c 下面列出的是基