2011-09-28 28 views
3

我有由R等拍摄一个文件名之间的以下内容:使用GSUB削减的性格两条斜线

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

我需要拿起两条斜线之间的长期/(即0097_0) ,但我试过gsub(".*/","",dbf.files[1]),但它给了我"0097_0_04_bed.dbf",这不是我想要的。

任何人都可以帮忙吗?谢谢。

回答

7

你可以尝试使用 -

.*/(.*)/.* 

,并使用第一组例如\ 1

> x = "0097_abcdef/0097_0/0097_0_04_bed.dbf" 
> sub(".*/(.*)/.*","\\1",x) 
[1] "0097_0" 
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) 
6

一种不同的方法是使用文件路径操作功能。我我看来,它比regexpr更清楚一点 - 它处理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" 

..They是矢量,所以你可以给他们的路径矢量。 为了完整性,还有file.path将部件再次拼接在一起。