r gsub和regex,从y * _x * _xxxx.csv中查看y * _x *

时间:2014-02-11 13:59:24

标签: regex r gsub

一般情况:我目前正在尝试根据从中检索的csv文件命名列表中的数据帧,我发现使用gsub和regex是可行的方法。不幸的是,我无法准确地生产出我需要的产品。 我会非常感谢有经验的人提供的一些提示,也许有一个合理的R正则表演作弊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 ......但是我错过了第二个索引。

问题:所以我的问题是,正则表达式允许我获取字符串“r1_m1”,“r2_m1”,“r1_m2”,...来自名为r * _m * _xyz.csv

的字符串

搜索记录: R正则表达式*仅用于一个字符,Gsub正则表达式替换,用于命名数据​​帧的文件名部分,R正则表达式备忘单,...

1 个答案:

答案 0 :(得分:1)

如果您的姓名总是五个字符,则可以使用substr

substr(f, 1, 5)

如果您想使用gsub,则必须对表达式进行分组(通过()),因为\\1指的是第一个组并插入其内容,例如:

gsub("^(r[0-9]+_m[0-9]+).*", "\\1", f)