r gsub 和正则表达式,从 y*_x*_xxxx.csv 中删除 y*_x*
Posted
技术标签:
【中文标题】r gsub 和正则表达式,从 y*_x*_xxxx.csv 中删除 y*_x*【英文标题】:r gsub and regex, obating y*_x* from y*_x*_xxxx.csv 【发布时间】:2014-03-09 08:40:20 【问题描述】:一般情况:我目前正在尝试根据从中检索到的 csv 文件来命名列表中的数据框,我发现使用 gsub 和正则表达式是可行的方法。不幸的是,我不能完全生产我需要的东西,只是有点。 我会非常感谢有经验的人提供一些提示,也许有一个合理的 R regex cheat cheet ?
文件名为 r2_m1_enzyme.csv,脚本应使用前 4 个字符来命名对应的数据帧 r2_m1,依此类推……
# generates a list of dataframes, to mimic a lapply(f,read.csv) output:
data <- list(data.frame(c(1,2)),data.frame(c(1,2)),data.frame(c(1,2)),data.frame(c(1,2)))
# this mimics file names obtained by list.files() function
f <-c("r1_m1_enzyme.csv","r2_m1_enzyme.csv","r1_m2_enzyme.csv","r2_m2_enzyme.csv")
# this should name the data frames according to the csv file they have been derived from
names(data) <- gsub("r*_m*_.*","\\1", f)
但它没有按预期工作......它们被命名为 r2_m1_enzyme.csv 而不是所需的 r2_m1,尽管 .* 应该停止它?
如果我这样做:
names(data) <- gsub("r*_.*","\\1", f)
我确实得到了 r1、r2、r3 ...但我缺少第二个索引。
问题:所以我的问题是,什么正则表达式可以让我从名为 r*_m*_xyz.csv 的字符串
搜索历史: R 正则表达式使用 * 仅用于一个字符,Gsub 正则表达式替换,R 使用文件名的一部分来命名数据框,R 正则表达式备忘单,...
【问题讨论】:
【参考方案1】:如果你的名字总是五个字符,你可以使用substr
:
substr(f, 1, 5)
如果您想使用gsub
,您必须对您的表达式进行分组(通过(
和)
),因为\\1
指的是第一个组并插入其内容,例如:
gsub("^(r[0-9]+_m[0-9]+).*", "\\1", f)
【讨论】:
以上是关于r gsub 和正则表达式,从 y*_x*_xxxx.csv 中删除 y*_x*的主要内容,如果未能解决你的问题,请参考以下文章