【问题标题】:looping through a column in R and extracting characters循环遍历 R 中的列并提取字符
【发布时间】: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 放入单独的列中

标签: r loops slice


【解决方案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 文件从头开始重新运行它,它可以正常工作,非常感谢。
猜你喜欢
  • 2020-08-15
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2012-01-19
  • 2018-11-13
  • 1970-01-01
  • 2012-05-22
相关资源
最近更新 更多