基于R中的多个参数查找匹配元素

qmelpv7a  于 2022-12-05  发布在  其他
关注(0)|答案(2)|浏览(111)

我有一个很大的数据框架,看起来像这样。我想找到哪些基因与其他基因匹配,基于开始和结束位置之间的重叠。

library(tidyverse)

data <- data.frame(group=c(1,1,1,2,2,2),
                     genes=c("A","B","C","D","E","F"), 
                     start=c(1000,2000,3000,800,400,2000),
                     end=c(1500,2500,3500,1200,500,10000))

data
#>   group genes start   end
#> 1     1     A  1000  1500
#> 2     1     B  2000  2500
#> 3     1     C  3000  3500
#> 4     2     D   800  1200
#> 5     2     E   400   500
#> 6     2     F  2000 10000

创建于2022年12月5日,reprex v2.0.2
我想要这样的东西。

data
#>   group genes start   end   match
#> 1     1     A  1000  1500    A-D
#> 2     1     B  2000  2500    B-F
#> 3     1     C  3000  3500    C-F
#> 4     2     D   800  1200    A-D
#> 5     2     E   400   500    NA
#> 6     2     F  2000 10000    F-C-B

我有点不知道如何开始。任何帮助都是感激不尽的

jgzswidk

jgzswidk1#

对于dplyr的开发版本,我们可以使用

library(dplyr)
library(stringr)
by <- join_by(overlaps(x$start, x$end, y$start, y$end))
full_join(data, data, by) %>% 
  group_by(genes= genes.x) %>% 
  summarise(match = if(n() ==1) NA_character_ else 
      str_c(genes.y, collapse = '-')) %>%
 left_join(data, .)
  • 输出
group genes start   end match
1     1     A  1000  1500   A-D
2     1     B  2000  2500   B-F
3     1     C  3000  3500   C-F
4     2     D   800  1200   A-D
5     2     E   400   500  <NA>
6     2     F  2000 10000 B-C-F
bqucvtff

bqucvtff2#

要根据起始位置和结束位置之间的重叠来查找哪些基因相互匹配,可以使用R中的fuzzyjoin包。该包提供了基于模糊匹配来连接数据的工具,这允许数据点之间的不精确匹配。
首先,如果还没有安装fuzzyjoin软件包,则需要安装它:

install.packages("fuzzyjoin")

安装软件包后,您可以使用fuzzy_left_join()函数根据起始位置和结束位置之间的重叠来连接数据。此函数将两个 Dataframe 作为参数:第一个是包含起始和结束位置的数据框(在本例中为data),第二个是包含组和基因信息的数据框。by参数用于指定要连接的列,match_fun参数用于指定匹配函数,在本例中为interval_overlap_join()
下面的示例说明如何使用fuzzy_left_join()函数根据起始位置和结束位置之间的重叠来查找相互匹配的基因:

library(tidyverse)
library(fuzzyjoin)

data %>%
  fuzzy_left_join(data,
                  by = c("group" = "group", "start" = "start", "end" = "end"),
                  match_fun = list(`==`, `==`, interval_overlap_join()))

这将返回一个新的 Dataframe ,其中包含原始数据以及基于起始和结束位置之间重叠的匹配基因。

相关问题