在R中提取文件名的一部分

时间:2013-06-11 22:52:28

标签: r extract filenames

我正在尝试编写一些代码来打开文件夹中的所有数据文件,应用一个函数(或一组函数)来提取我感兴趣的数据。到现在为止还挺好。问题是我想使用文件名的一个元素重新命名我从每个文件中提取的一个列,并且我很难弄清楚如何提取它。

我有一堆名为“YYYY-MM-DD geneName data copy.txt”的文件,想要提取文件名的“geneName”部分。 (例如,我有“2012-05-31 PMA1 data copy.txt”。)

日期格式始终相同(YYYY-MM-DD),所有文件名以“data copy.txt”结尾。

此外,某些文件名在日期和geneName之间的文件名中还有一个额外的实验注释(“E(数字)”或“Expt(数字)”)(例如,“2012-05-21 E7 PMA1数据copy.txt“);其他人在geneName和“data copy.txt”之间有“SDM”。

这是一些文件名列表和我想要的输出:

  • 2012-05-31 CTN1数据copy.txt(我想要“CTN1”
  • 2012-05-21 E7 PMA1数据copy.txt(想要“PMA1”)
  • 2011-11-29 TDH3 SDM数据copy.txt(想要“TDH3”)
  • 2012-01-04 POX1数据copy.txt(想要“POX1”)

有关如何在不必从某些文件中手动删除实验编号或“SDM”的情况下如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:3)

此处的模式是日期,您不想要的可选E \ _数字或Expt \ _数字,您想要的单词,然后是您不需要的可选SDM,后跟'data copy.txt ” ...

这是我的测试数据:

> names
[1] "2012-05-31 CTN1 data copy.txt"          
[2] "2012-05-21 E7 PMA1 data copy.txt"       
[3] "2011-11-29 TDH3 SDM data copy.txt"      
[4] "2012-01-04 POX1 data copy.txt"          
[5] "2011-11-29 ECHO data copy.txt"          
[6] "2011-11-29 E8 ECHO data copy.txt"       
[7] "2011-11-29 ECHO SDM data copy.txt"      
[8] "2011-11-29 Expt2 ECHO SDM data copy.txt"

这是我的sub

> sub(pattern="^....-..-.. (E\\d+ |Expt\\d+ )*(\\w+) (SDM )*data copy.txt","\\2",names)
[1] "CTN1" "PMA1" "TDH3" "POX1" "ECHO" "ECHO" "ECHO" "ECHO"

如果您的E前缀有多个数字,这也可以。我试图在E开始的测试集中添加一些内容,以确保它们得到正确处理,以及E前缀 SDM的情况。