r - 在数据框中的另一个字符串中搜索部分字符串
问题描述
我有一个看起来像这样的数据集:
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"
}
}
但这显然不起作用,我不确定这是否是最聪明的方法。任何帮助表示赞赏。
解决方案
解决此问题的一种简单方法是使用 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")
推荐阅读
- laravel - 在 laravel-passport-social-grant 包上获取 invalid_credentials
- amazon-web-services - SDK的S3://协议和客户端方法有什么区别
- azure-keyvault - 用于在 Function App 中导入 Azure Key Vault 证书的 ARM 模板
- php - CET DateTime php上的DST冲突
- python - df.mean(axis=1) 是所有行的函数数据框 python 吗?
- c++ - C++ 复制构造函数中的异常
- reactjs - 单击提交按钮时反应显示错误
- c# - 在 DateTimeOffset 列而不是 DateTime(2) 中存储 UTC 日期有什么意义吗?
- python - ProgrammingError 1064 在 Python 中使用 MySQL 从现有表中执行 CREATE TABLE AS SELECT
- c++ - 是否可以使用前缀表示法调用 << 运算符?