我有一个数据框,一列有蛋白质ID和一堆荒谬的东西,如下图所示。我想要的ID总是第4到第9个字符,所以我想循环遍历列并提取这些以将它们导出到另一个csv文件。该列也充满了NA,我不想要。我想要在R中设置一个循环,它会在每次切出我想要的确切字符时如果有NA则不执行任何操作,然后在找到空白时停止,因为这将是列表的结尾。 / p>
列
的模拟示例Prot Id's
sp|IDIDID|PSKSJ_45HELI^sp|IDIDID|FRUEHFJ^HSLHFHG#%$^9y7hiuahl
sp|IDIDID|PSKSJ_45HELI^spuegfuehfw3|IDIDID|FRUEHFJ^HDGFLFHEHFN
NA
NA
sp|IDIDID|PSKSJ_45HELIWUEU^#H63hHU6e^sp|IDIDID|FRUEHFJ^HFGHG:WHFUWH^hfue
NA
sp|IDIDID|PSKSJ_45HELI^spJFBEFBUEBFE|IDIDID|FRUEHFJ^
NA
NA
说IDIDID的部分是我想要的,任何帮助将不胜感激
答案 0 :(得分:3)
使用x = c("sp|456879|sequence1","sp|121212|sequence2",NA)
d = data.frame(Prot_Id = x)
substr(d[!is.na(d$Prot_Id),],4,9)
功能提取所需的范围:
[1] "456879" "121212"
输出:
.then()