在R中提取文件名的一部分
我试图编写一些代码来打开文件夹中的所有数据文件,应用一个函数(或一组函数)来提取我感兴趣的数据。到目前为止,一切顺利。问题是,我想使用文件名的一个元素重新命名我从每个文件中提取的一列,我很难弄清楚如何提取它 我有一堆名为“YYYY-MM-DD geneName data copy.txt”的文件,希望提取文件名的“geneName”部分。(例如,我有“2012-05-31 PMA1 data copy.txt”。) 日期格式始终相同(YYYY-MM-DD),所有文件名都以“data copy.txt”结尾 此外,一些文件名在日期和基因名之间的文件名中有一个附加的实验注释(E(数字)”或“Expt(数字)”)(例如,“2012-05-21 E7 PMA1 data copy.txt”);另一些在geneName和“data copy.txt”之间有“SDM” 以下是一些文件名和我所需输出的列表:在R中提取文件名的一部分,r,extract,filenames,R,Extract,Filenames,我试图编写一些代码来打开文件夹中的所有数据文件,应用一个函数(或一组函数)来提取我感兴趣的数据。到目前为止,一切顺利。问题是,我想使用文件名的一个元素重新命名我从每个文件中提取的一列,我很难弄清楚如何提取它 我有一堆名为“YYYY-MM-DD geneName data copy.txt”的文件,希望提取文件名的“geneName”部分。(例如,我有“2012-05-31 PMA1 data copy.txt”。) 日期格式始终相同(YYYY-MM-DD),所有文件名都以“data copy.t
- 2012-05-31 CTN1 data copy.txt(我想要“CTN1”)
- 2012-05-21 E7 PMA1数据副本.txt(需要“PMA1”)
- 2011年11月29日TDH3 SDM data copy.txt(需要“TDH3”)
- 2012-01-04 POX1数据副本.txt(需要“POX1”)
谢谢!这里的模式是一个日期,一个您不想要的可选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(pattern="^....-..-.. (E\\d+ |Expt\\d+ )*(\\w+) (SDM )*data copy.txt","\\2",names)
[1] "CTN1" "PMA1" "TDH3" "POX1" "ECHO" "ECHO" "ECHO" "ECHO"
如果你的电子前缀有一个以上的数字,这也会起作用。我试着在我的测试集中添加一些东西,从E
开始,以确保它们得到正确的处理,以及电子前缀和SDM的情况。这里的模式是一个日期,一个你不想要的可选电子数字或Expt\digit,一个你想要的单词,然后是一个数字n您不需要的可选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(pattern="^....-..-.. (E\\d+ |Expt\\d+ )*(\\w+) (SDM )*data copy.txt","\\2",names)
[1] "CTN1" "PMA1" "TDH3" "POX1" "ECHO" "ECHO" "ECHO" "ECHO"
如果你的电子前缀超过一个数字,这也会起作用。我试着从E
开始在我的测试集中添加一些东西,以确保它们得到正确的处理,就像对待电子前缀和SDM一样。太好了,谢谢!我知道有一种方法可以做到这一点,我只是还不够新,所以我真的很挣扎ith如何指定参数,使用哪个函数…非常感谢您花时间帮助我,并给出了如此清晰的答案,一个既解决了问题,又说明了如何修改此策略以应对未来的额外意外情况和其他问题的答案!这些模式匹配字符串称为“正则表达式”,或者“regexp”,并且在许多编程语言中都可以找到,所以如果你想知道更多,你知道谷歌应该做什么!太好了,谢谢!我知道有一种方法可以做到这一点,我只是对R还不够了解,我真的在努力研究如何指定参数,使用哪个函数…非常感谢你花时间帮助我并给出suc这是一个明确的答案,既解决了问题,又说明了如何修改此策略以应对未来的额外意外事件和其他问题!这些模式匹配字符串称为“正则表达式”,或“regexps”,在许多编程语言中都可以找到,因此如果您想了解更多,您知道谷歌应该做什么!