如何使用 R 在数据框的单元格中发现 phrase/word

How to spot a phrase/word in a cell of a dataframe, using R

有一个像 'df' 这样的 data.frame,我想在列 'bio_process' 的每个单元格中找到这个确切的短语 "keratinization [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))

为了实现这一点,我应用了 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]
    }
  }

因此,我希望 'ids' 向量的内容如下所示。

"Q9BYP8" "Q6L8G8" "Q9BYR4"

但是,%in% 不适用于单元格,因为 'keratinization [GO:0031424]' 不是唯一的内容。

有什么想法吗?谢谢

你可以在 Base-R

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

[1] Q9BYP8 Q6L8G8 Q9BYR4

请注意,我必须使用 \ 转义 [ 字符,因为方括号在正则表达式中具有特殊含义。