首页 > 解决方案 > 在数据框中的另一个字符串中搜索部分字符串

问题描述

我有一个看起来像这样的数据集:

long_name x y short_name
Adhesion G protein-coupled receptor E2 (ADGRE2) 10 10 ADGRE2
Adhesion G-protein coupled receptor G2 (ADGRG2) 12 12 ADX2
ADM (ADM) 13 13 ADM
ADP-ribosyl cyclase/cyclic ADP-ribose hydrolase 1 (CD38) 14 14 ACH1

我想要做的是创建一个附加列,该列将说明 的值short_name是否在 的值中long_name以在新列中生成 TRUE/FALSE(或存在/不)值。

我在这里看到了一些关于使用该grepl函数在另一个字符串中查找某个字符串的建议。我遇到的问题是试图在整个文件上迭代它。

我有类似的东西:

for (row in 1:length(nrows(combined_proteins))){

  long_name = proteins[1]
  short_name = proteins[4]

  if grepl(short_name, long_name) = TRUE{

   proteins$presence = "Present"

   else proteins$presence = "Not"
  }
}

但这显然不起作用,我不确定这是否是最聪明的方法。任何帮助表示赞赏。

标签: rloops

解决方案


解决此问题的一种简单方法是使用 stringr 包中的ifelse函数和str_detect

proteins<-read.table(header = TRUE, stringsAsFactors = FALSE, text=
"long_name x y short_name
'Adhesion G protein-coupled receptor E2 (ADGRE2)' 10 10 ADGRE2
'Adhesion G-protein coupled receptor G2 (ADGRG2)' 12 12 ADX2
'ADM (ADM)' 13 13 ADM
'ADP-ribosyl cyclase/cyclic ADP-ribose hydrolase 1 (CD38)' 14 14 ACH1"
)

library(stringr)
proteins$presence<- ifelse( str_detect(proteins$long_name, proteins$short_name ) , "Present",  "Not")

推荐阅读