如何使用 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
请注意,我必须使用 \
转义 [
字符,因为方括号在正则表达式中具有特殊含义。
有一个像 '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
请注意,我必须使用 \
转义 [
字符,因为方括号在正则表达式中具有特殊含义。