有一个像'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]'不是唯一的内容的细胞不工作。
任何想法?谅谅
你可以使用 grepl
在基层
df$ID[grepl("keratinization \\[GO:0031424\\]",df$bio_process)]
[1] Q9BYP8 Q6L8G8 Q9BYR4
注意,我不得不逃避 [
字样 \\
因为方括号在regex中具有特殊意义。