如何在数据框架的单元格中使用R发现短语?

问题描述 投票:0回答:1

有一个像'df'这样的data.frame,我想在'bio_process'列的每个单元格中发现 "角质化[GO:0031424]"这个确切的短语。之后,我想创建一个新的向量,其中包含匹配发生的观测值的'ID'。

ID <- c("Q9BYP8", "Q17RH7", "Q6L8G8", "Q9BYR4")
bio_process <- c("keratinization [GO:0031424]", "NA", "keratinization [GO:0031424]", "aging [GO:0007568]; hair cycle [GO:0042633]; keratinization [GO:0031424]")
df <- as.data.frame(cbind(ID,bio_process))

为了达到这个目的,我应用了一个 "ID"。for loop. 我用的是 %in% 到循环中,就像这样。

n <- 4
ids <- vector(mode = "character", length = n)
for (i in 1:n) {
  if ("keratinization [GO:0031424]" %in% df$bio_process[i]) {
    ids[i] <- data$ID[i]
    }
  }

结果,我希望 "id "向量的内容就像下面这个。

"Q9BYP8" "Q6L8G8" "Q9BYR4"

但是,我希望'ids'向量的内容像下面这个。%in% 对'角质化[GO:0031424]'不是唯一的内容的细胞不工作。

任何想法?谅谅

r bioinformatics
1个回答
1
投票

你可以使用 grepl 在基层

df$ID[grepl("keratinization \\[GO:0031424\\]",df$bio_process)]

[1] Q9BYP8 Q6L8G8 Q9BYR4

注意,我不得不逃避 [ 字样 \\ 因为方括号在regex中具有特殊意义。

© www.soinside.com 2019 - 2024. All rights reserved.