我有一个文件列表,所有文件名也都有文件路径。
[1] c:/temp/dat/work/A0017517.T c:/temp/dat/work/A0017530.T
[3] c:/temp/dat/work/A0017565.T c:/temp/dat/work/A0017588.T
[5] c:/temp/dat/work/A0017620.T c:/temp/dat/work/A0017697.T
[7] c:/temp/dat/work/A0018123.T c:/temp/dat/work/A0018124.T
我只想获取没有任何文件路径的文件名列表。我尝试了basename(),但我不知道如何在列表中使用它 在此先感谢您的帮助!
出于某种原因,当我试图评论时,一切都搞砸了 - 我有一个csv文件,看起来像这样 -
"","size","isdir","mode","mtime"
"C/temp/A0017517.T",122099,FALSE,666,2015-10-08 13:39:26
"C/temp/A0017530.T",122706,FALSE,666,2015-10-08 13:39:26
"C/temp/A0017565.T",76613,FALSE,666,2015-10-01 20:37:24
"C/temp/A0017588.T",162651,FALSE,666,2015-10-08 13:39:28
我想要做的就是提取第一个包含文件名和文件路径的列,并获取一个只包含文件名的文本文件(无文件路径)。
答案 0 :(得分:4)
sub('.*/', '', x)
#[1] "A0017517.T" "A0017530.T" "A0017565.T" "A0017588.T"
#[5] "A0017620.T" "A0017697.T" "A0018123.T" "A0018124.T"
正则表达式通配符".*"
将是贪婪的并且收集尽可能多的字符串,因为它可以将所有正斜杠收集到最后一个。
还有:
basename(x)
#[1] "A0017517.T" "A0017530.T" "A0017565.T" "A0017588.T"
#[5] "A0017620.T" "A0017697.T" "A0018123.T" "A0018124.T"
<强>更新强>
从您的评论中看来,您有一个数据框。方法不会改变。如果您有因素basename
要求您将向量强制转换为as.character
。
df
file size isdir
1 c:/temp/dat/work/A0017517.T 93 TRUE
2 c:/temp/dat/work/A0017530.T 60 TRUE
3 c:/temp/dat/work/A0017565.T 55 FALSE
4 c:/temp/dat/work/A0017588.T 52 TRUE
5 c:/temp/dat/work/A0017620.T 95 TRUE
6 c:/temp/dat/work/A0017697.T 49 FALSE
7 c:/temp/dat/work/A0018123.T 65 TRUE
8 c:/temp/dat/work/A0018124.T 56 FALSE
basename(as.character(df[,1]))
[1] "A0017517.T" "A0017530.T" "A0017565.T" "A0017588.T"
[5] "A0017620.T" "A0017697.T" "A0018123.T" "A0018124.T"
#or
sub('.*/', '', df[,1])
[1] "A0017517.T" "A0017530.T" "A0017565.T" "A0017588.T"
[5] "A0017620.T" "A0017697.T" "A0018123.T" "A0018124.T"
答案 1 :(得分:1)
简单来说
files <- list.files("c:/temp/dat/work/")