我有一个很大的数据框架,看起来像这样。我想找到哪些基因与其他基因匹配,基于开始和结束位置之间的重叠。
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
我有点不知道如何开始。任何帮助都是感激不尽的
2条答案
按热度按时间jgzswidk1#
对于
dplyr
的开发版本,我们可以使用bqucvtff2#
要根据起始位置和结束位置之间的重叠来查找哪些基因相互匹配,可以使用R中的
fuzzyjoin
包。该包提供了基于模糊匹配来连接数据的工具,这允许数据点之间的不精确匹配。首先,如果还没有安装
fuzzyjoin
软件包,则需要安装它:安装软件包后,您可以使用
fuzzy_left_join()
函数根据起始位置和结束位置之间的重叠来连接数据。此函数将两个 Dataframe 作为参数:第一个是包含起始和结束位置的数据框(在本例中为data),第二个是包含组和基因信息的数据框。by参数用于指定要连接的列,match_fun
参数用于指定匹配函数,在本例中为interval_overlap_join()
。下面的示例说明如何使用
fuzzy_left_join()
函数根据起始位置和结束位置之间的重叠来查找相互匹配的基因:这将返回一个新的 Dataframe ,其中包含原始数据以及基于起始和结束位置之间重叠的匹配基因。