循环遍历 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 中的列并提取字符的主要内容,如果未能解决你的问题,请参考以下文章

遍历火花数据框中的列并计算最小值最大值

如果所有值都相同,则循环遍历 bash 测试中的列 - AWK

从 .txt 中提取以空格分隔的列并添加以保存在新数据框中

遍历数据框中的列并在同一张图上绘图(Python)

PL/SQL:循环遍历 XML 列并从重复元素中提取值

循环遍历 Rmarkdown 中的分组 id 列并呈现 PDF