2

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

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

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

此外,一些文件名在日期和基因名称之间的文件名中具有附加的实验注释(“E(数字)”或“扩展(数字)”)(例如,“2012-05-21 E7 PMA1 数据复制.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”的情况下如何做到这一点的任何想法?

谢谢!

4

1 回答 1

4

这里的模式是一个日期,一个您不想要的可选 E\digit 或 Expt\digit,一个您想要的单词,然后是一个您不想要的可选 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-prefixSDM 的情况。

于 2013-06-11T23:13:12.030 回答