循环遍历 R 中的列并提取字符
Posted
技术标签:
【中文标题】循环遍历 R 中的列并提取字符【英文标题】:looping through a column in R and extracting characters 【发布时间】:2015-12-02 12:29:06 【问题描述】:我有一个数据框,其中一列有蛋白质 ID 以及一堆无意义的东西,如下图所示。我想要的 id 始终是第 4 到第 9 个字符,所以我想遍历列并提取它们以将它们导出到另一个 csv 文件。该专栏也充满了我不想要的NA。我正在努力在 R 中想出一个循环,它将每次都切出我想要的确切字符,如果有 NA,则什么也不做,然后在找到空白时停止,因为这将是列表的结尾。
列的模拟示例
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 的部分是我想要得到的,任何帮助将不胜感激
【问题讨论】:
听起来像grep
解决方案。
read.table(text = as.character(dd$Prot_Ids), sep = '|', fill = TRUE)
将所有 ID 放入单独的列中
【参考方案1】:
使用substr
函数提取您想要的范围:
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"
【讨论】:
所以我把它放进去,出于某种原因,我只返回了根本不在我的 prot_id 中的数字,而不是 id>jeff<-substr(anotation[!is.na(anotation$prot_id),],4,9)
>head(jeff)
[1 ] "7775," "2713,"
然后我扩展了切片以尝试将其置于上下文中并得到这个 > jeff<-substr(anotation[!is.na(anotation$prot_id),],1,20)
> head(jeff)
[1] "c(57775, 2959, 2960," "c(12713, 19248, 1924 "所以我彻底糊涂了
我不确定我做错了什么,但我只是通过加载 csv 文件从头开始重新运行它,它可以正常工作,非常感谢。以上是关于循环遍历 R 中的列并提取字符的主要内容,如果未能解决你的问题,请参考以下文章