我有由R等拍摄一个文件名之间的以下内容:使用GSUB削减的性格两条斜线
"0097_abcdef/0097_0/0097_0_04_bed.dbf"
我需要拿起两条斜线之间的长期/
(即0097_0
) ,但我试过gsub(".*/","",dbf.files[1])
,但它给了我"0097_0_04_bed.dbf"
,这不是我想要的。
任何人都可以帮忙吗?谢谢。
我有由R等拍摄一个文件名之间的以下内容:使用GSUB削减的性格两条斜线
"0097_abcdef/0097_0/0097_0_04_bed.dbf"
我需要拿起两条斜线之间的长期/
(即0097_0
) ,但我试过gsub(".*/","",dbf.files[1])
,但它给了我"0097_0_04_bed.dbf"
,这不是我想要的。
任何人都可以帮忙吗?谢谢。
你可以尝试使用 -
.*/(.*)/.*
,并使用第一组例如\ 1
> x = "0097_abcdef/0097_0/0097_0_04_bed.dbf"
> sub(".*/(.*)/.*","\\1",x)
[1] "0097_0"
您可以使用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"
您可以使用函数read.table:
tc <- textConnection(dbf.files)
y <- read.table(tc,sep="/",as.is=TRUE)[2]
close(tc)
一种不同的方法是使用文件路径操作功能。我我看来,它比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
将部件再次拼接在一起。