首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过将dataframe中的条件匹配到一个"lookup“dataframe,在dataframe中创建一个新列

通过将dataframe中的条件匹配到一个"lookup“dataframe,在dataframe中创建一个新列
EN

Stack Overflow用户
提问于 2021-05-14 12:53:56
回答 2查看 28关注 0票数 0

我有一个数据帧

代码语言:javascript
复制
gene_symbols<- c ('ABL1', 'ABL1', 'Abl2', 'Accn1', 'Accn1')
Result_value<- c (1, 4, 5, 5, 2)
df<-data.frame(gene_symbols, Result_value)

在这个gene_symbols的数据框架中有重复,但它是人类和老鼠基因的混合体。

我还有第二个dataframe用作条件查找或字典

代码语言:javascript
复制
humanGene<-c('ABL1', 'ABL2', 'ACCN1')
mouseGene<-c('Abl1', 'Abl2', 'Accn1')
df2<-data.frame(humanGene, mouseGene)

我想在dataframe中创建一个新的列,这是仅有的人类基因之一。如果column1中有人类基因,它就会被保留下来,如果有老鼠基因,它就会被df2中的人类基因所取代。输出应如下所示:

我正在尝试使用条件查找

代码语言:javascript
复制
df$HumanGene <- ifelse(df$gene.symbols %in% df2$mouseGene, df2$humanGene, df$gene.symbols)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-14 13:04:49

使用join和coalesce

代码语言:javascript
复制
library(dplyr)

df %>%
  left_join(df2, by = c('gene_symbols' = 'mouseGene')) %>%
  mutate(humanGene = coalesce(humanGene, gene_symbols))

#  gene_symbols Result_value humanGene
#1         ABL1            1      ABL1
#2         ABL1            4      ABL1
#3         Abl2            5      ABL2
#4        Accn1            5     ACCN1
#5        Accn1            2     ACCN1
票数 1
EN

Stack Overflow用户

发布于 2021-05-15 01:49:23

我们可以使用fcoalesce

代码语言:javascript
复制
library(data.table)
setDT(df)[df2, humanGene := fcoalesce(humanGene, gene_symbols), on = .(gene_symbols = mouseGene)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67529215

复制
相关文章

相似问题

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