首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别数据集之间的匹配字符串?

如何识别数据集之间的匹配字符串?
EN

Stack Overflow用户
提问于 2020-05-21 18:45:25
回答 3查看 45关注 0票数 2

我一直在尝试用答案来回答其他类似的问题,但没有成功。我有两个数据集:

代码语言:javascript
复制
#df1:
Gene
ACE
BRCA
HER2
代码语言:javascript
复制
#df2:
Gene       interactors
GP5       ACE, NOS, C456
TP53      NOS, BRCA, NOTCH4

我希望在我的第一个数据集中添加一列,以识别在我的第二个数据集中显示为交互作用的基因。

输出:

代码语言:javascript
复制
#df1:
Gene   Matches
ACE      TRUE
BRCA     TRUE
HER2     FALSE

目前我正在尝试df1$Matches <- mapply(grepl, df1$Gene, df2$interactors)这个运行,但是当我增加df1中的基因数量时,匹配的数量下降,这是没有意义的,因为我没有删除任何最初运行的基因,使我认为这并不像我预期的那样工作。

我也尝试过:

代码语言:javascript
复制
library(stringr)
df1 %>% 
+     rowwise() %>% 
+     mutate(exists_in_title = str_detect(Gene, df2$interactors))
Error: Column `exists_in_title` must be length 1 (the group size), not 3654
In addition: There were 50 or more warnings (use warnings() to see the first 50)

我还尝试了dplyr版本,但出现了相同的错误。

我还能用什么其他方法来解决这个问题呢?任何帮助都将不胜感激。

输入数据:

代码语言:javascript
复制
dput(df1)
structure(list(Gene = c("ACE", "BRCA", "HER2")), row.names = c(NA, 
-3L), class = c("data.table", "data.frame"))

dput(df2)
structure(list(Gene = c("GP5", "TP53"), interactors = c("ACE, NOS, C456", 
"NOS, BRCA, NOTCH4")), row.names = c(NA, -2L), class = c("data.table", 
"data.frame"))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-21 19:15:45

您可以使用strsplit进行拆分

代码语言:javascript
复制
library(dplyr)
df1$Matches <-  df1$Gene %in% trimws(unlist(strsplit(df2$interactors, ",")))

> df1
  Gene Matches
1  ACE    TRUE
2 BRCA    TRUE
3 HER2   FALSE
票数 1
EN

Stack Overflow用户

发布于 2020-05-21 19:08:45

这是一个结合了tidyr和Base R的答案。首先,我们读取数据:

代码语言:javascript
复制
text1 <- "Gene
ACE
BRCA
HER2"
text2 <- "Gene|interactors
GP5|ACE, NOS, C456
TP53|NOS, BRCA, NOTCH4"

df1 <- read.csv(text = text1,header = TRUE,stringsAsFactors = FALSE)
df2 <- read.csv(text = text2,header = TRUE,stringsAsFactors = FALSE,sep = "|")

接下来,我们分离df2中的交互,并使用生成的向量在df1中创建逻辑变量。

代码语言:javascript
复制
df2 <- separate_rows(df2,interactors)
df1$matches <- ifelse(df1$Gene %in% df2$interactors,TRUE,FALSE)
df1

对输出执行...and操作:

代码语言:javascript
复制
> df1
  Gene     matches
1  ACE        TRUE
2 BRCA        TRUE
3 HER2       FALSE
> 
票数 0
EN

Stack Overflow用户

发布于 2020-05-21 19:19:23

使用基数R

代码语言:javascript
复制
genes <- df1$Gene
res <- genes %in% trimws(unlist(strsplit(df2$interactors, ",")))

结果

代码语言:javascript
复制
> res
[1]  TRUE  TRUE FALSE

可以使用以下命令将其添加到df1

代码语言:javascript
复制
df1$Matches <- res
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61932720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档