在R中使用gsub函数来删除两个斜杠之间的字符。

3

我有一个文件名,R捕获的格式如下:

"0097_abcdef/0097_0/0097_0_04_bed.dbf"

我需要提取两个斜线之间的术语(即“0097_0”),但我尝试使用 gsub(".*/","",dbf.files[1]),但它给了我 "0097_0_04_bed.dbf",这不是我想要的。
有谁可以帮帮我吗?谢谢。
4个回答

9
你可以尝试使用 -
 .*/(.*)/.* 

使用第一组,例如\1。

> x = "0097_abcdef/0097_0/0097_0_04_bed.dbf"
> sub(".*/(.*)/.*","\\1",x)
[1] "0097_0"

6

另一种方法是使用文件路径操作函数。在我看来,这比正则表达式更清晰,并且还可以正确处理Windows路径:

# On a Linux path
x <- "0097_abcdef/0097_0/0097_0_04_bed.dbf"
basename( dirname(x) )
# [1] "0097_0"

# On a Windows path
y <- "c:\\0097_abcdef\\0097_0\\0097_0_04_bed.dbf"
basename( dirname(y) )
# [1] "0097_0"

它们是矢量化的,因此您可以为它们提供路径向量。 为了完整起见,还有file.path可将这些部分拼合在一起。


2

你可以轻松使用strsplit代替。例如,

R> x = "0097_abcdef/0097_0/0097_0_04_bed.dbf"
R> strsplit(x, "/")
[[1]]
[1] "0097_abcdef"       "0097_0"            "0097_0_04_bed.dbf"

R> strsplit(x, "/")[[1]][2]
[1] "0097_0"

0
你可以使用read.table:
tc <- textConnection(dbf.files)
y <- read.table(tc,sep="/",as.is=TRUE)[2]
close(tc)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接