如何从字符串中提取一个或多个单词并在两个不同的列中搜索它们以形成 R 中的另一个文件

LR

我需要通过提取 df1$Id 中“gene_id”之后的单词并在 df2 的 2 个不同列(df2$Gene.id、df2$Gene.name)中搜索它们来找到 df2 中存在哪些 df1 行。

这是我的数据的样子:

df1 <- data_frame(
  Chr = c("NC_035077.1", "NC_035078.1", "NC_035083.1", "NC_035083.1", "NC_035084.1", "NC_035084.1", "NC_035088.1"),
  Pos = c("61344375", "78462810", "24378412", "24387264","66360216", "66360385","40131947"),
  Var=c("tco","born", "tco","tco", "born","tco","tco"),
  Id=c("gene_id calm2", "gene_id LOC110500174", "gene_id ahcy", "gene_id ahcy", "gene_id cebpd", "gene_id cebpd", "gene_id LOC110537636, gene_id hsc70a")
  )

df1
Chr         Pos      Var   Id                                  
  <chr>       <chr>    <chr> <chr>                               
1 NC_035077.1 61344375 tco   gene_id calm2                       
2 NC_035078.1 78462810 born  gene_id LOC110500174                
3 NC_035083.1 24378412 tco   gene_id ahcy                        
4 NC_035083.1 24387264 tco   gene_id ahcy                        
5 NC_035084.1 66360216 born  gene_id cebpd                       
6 NC_035084.1 66360385 tco   gene_id cebpd                       
7 NC_035088.1 40131947 tco   gene_id LOC110537636, gene_id hsc70a


df2 <- data_frame(
  Gene.id = c("LOC110488122", "NA", "LOC110490243", "LOC110537256", "LOC100136165", "LOC100379112", "LOC100379114", "LOC110527949", "LOC110537636"),
  Gene.name = c("agr2", "agrn", "ahcy", "akap1","cebpb", "cebpb","cebpd", "ddost","slc6a13")
  )
 
df2
 Gene.id      Gene.name
  <chr>        <chr>    
1 LOC110488122 agr2     
2 NA           agrn     
3 LOC110490243 ahcy     
4 LOC110537256 akap1    
5 LOC100136165 cebpb    
6 LOC100379112 cebpb    
7 LOC100379114 cebpd    
8 LOC110527949 ddost    
9 LOC110537636 slc6a13

正如您所看到的,一些 df1$Id 有两个基因 ID,我需要在 df2 中检查它们,无论它们与 df2$Gene.id 还是 df2$Gene.name 匹配,我都需要将该行包含在输出文件。
df2 中也有一些 NA。

我的输出应该是这样的:

Chr         Pos      Var   Id                                    Gene.id       Gene.name                                
NC_035083.1 24378412 tco   gene_id ahcy                          LOC110490243  ahcy
NC_035083.1 24387264 tco   gene_id ahcy                          LOC110490243  ahcy
NC_035084.1 66360216 born  gene_id cebpd                         LOC100379114  cebpd 
NC_035084.1 66360385 tco   gene_id cebpd                         LOC100379114  cebpd
NC_035088.1 40131947 tco   gene_id LOC110537636, gene_id hsc70a  LOC110537636  slc6a13

任何有关如何实现这一目标的帮助将不胜感激。

塞缪尔·卡尔德隆

这使用你的例子做到了。我假设您的所有数据都遵循相同的格式。

你需要创建一个干净的“一切”一栏加入df1df2完成两次连接后,清理无用的行并NA使用“all in”列更新s的值

按步骤

  1. 创建新列以分隔。
  2. 用多个值分隔行。
  3. 删除“gene_id”,以便您可以加入干净的“全部”列。
  4. 先连接一列,然后再连接另一列。顺序无所谓。
  5. 过滤没有任何匹配项的行。
  6. 更新你NA
  7. 删除,new_col因为您不再需要它

代码

library(stringr) # for str_remove()
library(tidyr) # for separate_rows()
library(dplyr) # for everything else

df1 %>% 
  mutate(new_col = Id) %>% 
  separate_rows(new_col, sep = ", ") %>% 
  mutate(new_col = str_remove(new_col, "gene_id ")) %>% 
  left_join(df2, by = c("new_col" = "Gene.name")) %>% 
  left_join(df2, by = c("new_col" = "Gene.id")) %>% 
  filter(!is.na(Gene.name) | !is.na(Gene.id)) %>% 
  mutate(Gene.name = if_else(is.na(Gene.name), new_col, Gene.name),
         Gene.id = if_else(is.na(Gene.id), new_col, Gene.id)) %>% 
  select(-new_col)
  
  Chr         Pos      Var   Id                                   Gene.id      Gene.name
  <chr>       <chr>    <chr> <chr>                                <chr>        <chr>    
1 NC_035083.1 24378412 tco   gene_id ahcy                         LOC110490243 ahcy     
2 NC_035083.1 24387264 tco   gene_id ahcy                         LOC110490243 ahcy     
3 NC_035084.1 66360216 born  gene_id cebpd                        LOC100379114 cebpd    
4 NC_035084.1 66360385 tco   gene_id cebpd                        LOC100379114 cebpd    
5 NC_035088.1 40131947 tco   gene_id LOC110537636, gene_id hsc70a LOC110537636 slc6a13

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据R中另一个向量中的字符从字符串中提取字符

使用 R 中另一个数据框中另一列中的字符串搜索一列中的字符串

R根据另一个表中的搜索字符串更新表列

在 R 中提取字符串中的最后一个单词 - 面临错误

将一个文件中的“模式”与另一个文件中的标头名称匹配(R,Unix)

在一个.R文件中定义所有功能,然后从另一个.R文件中调用它们。如果可能的话如何?

从另一个.r文件中编辑.r文件

从列中提取数据以在R中创建另一个列

用R中的另一个特定模式重命名多个文件的特定模式

如何从R中的另一个数据帧中提取数据帧

当变量在另一个文件中定义时,将固定宽度文件导入R

如何从另一个Jupyter笔记本文件中获取R代码?

如何从两个向量(一个是键,另一个是值)在R中创建一个列表?

如何从R中的另一个向量中减去一个向量

如何在R中的另一个脚本中调用一个脚本

如何在R中的另一个字符串向量中grep一个字符串向量

通过ID合并R中的两个Dataframes,一个是另一个的子集

如何通过数据帧R中的另一个列值计算字符串的频率

R 如何计算一个字符串向量在另一个字符串向量中的出现次数

如何制作一个变量以显示R中另一个变量的差异?

如何用R中另一个的分位数创建一个变量?

如何从r中具有相同列的另一个数据帧中提取一个数据帧的值?

r如何根据条件更改多个列(在另一个列中重复)

根据 R 中另一个 DataFrame 的条件从 DataFrame 中提取值

在R中划分两个数据帧(一个到另一个)

如何提取数据帧的每一行并将解析的字符串从另一个数据帧添加到R中第一个数据帧的列

如何基于r中两个df的条件求和另一个df中的值?

创建一个基于R中的另一列对从一列中提取的字符串文本进行分组的列

根据R中另一个csv文件中的内容从csv文件中设置数据子集