我试图根据一个表中的正则表达式在R中执行一个联接。据我所知,模糊连接包应该正是我所需要的,但我无法让它起作用。下面是我试图做的事情的一个例子:
library(tidyverse)
library(fuzzyjoin)
(typing_table <- tribble(
~typing,
"DPB02:01",
"DPB04:02"
)
)
(P_group_table <- tribble(
~P_group, ~Alleles,
"DP1", "DPB01:01:01:01/DPB01:01:01:02/DPB01:01:01:03",
"DP2", "DPB02:01:02:01/DPB02:01:02:02/DPB02:01:02:03",
"DP3", "DPB03:01:01:01/DPB03:01:01:02/DPB03:01:01:03",
"DP4", "DPB04:01:01:01/DPB04:01:01:02/DPB04:01:01:03"
)
)我试图通过搜索“等位基因”字符串中的“the”值将P_group_table加入到typing_table。我使用了以下表达式:
(typing_table %>% regex_left_join(P_group_table, by = c("typing" = "Alleles")))结果是一个联接,但正确表中的值是空的。我想我一定是误解了regex_left_join表达式的语法,但我无法理解。我已经验证了可以使用以下代码将“the”值用作regex模式:
(typing_table_2 <- typing_table %>% slice_head)
(P_group_table %>% filter(str_detect(Alleles, typing_table_2$typing)))发布于 2022-08-03 15:49:56
我们可以利用str_detect作为match_fun在fuzzy_.*_join中的应用
library(fuzzyjoin)
library(stringr)
fuzzy_right_join(P_group_table, typing_table, by = c("Alleles" = "typing"),
match_fun = str_detect)或可能使用
regex_right_join(P_group_table, typing_table, by = c("Alleles" = "typing"))
# A tibble: 2 × 3
P_group Alleles typing
<chr> <chr> <chr>
1 DP2 DPB02:01:02:01/DPB02:01:02:02/DPB02:01:02:03 DPB02:01
2 <NA> <NA> DPB04:02请注意切换pattern时的差异
> str_detect("DPB02:01", "DPB02:01:02:01/DPB02:01:02:02/DPB02:01:02:03")
[1] FALSE
> str_detect("DPB02:01:02:01/DPB02:01:02:02/DPB02:01:02:03", "DPB02:01")
[1] TRUE执行left_join的一个选项是在执行连接之前从'P_group_table‘获取子字符串
left_join(typing_table, P_group_table %>%
mutate(typing = substr(Alleles, 1, 8)), by = "typing")
# A tibble: 2 × 3
typing P_group Alleles
<chr> <chr> <chr>
1 DPB02:01 DP2 DPB02:01:02:01/DPB02:01:02:02/DPB02:01:02:03
2 DPB04:02 <NA> <NA> https://stackoverflow.com/questions/73224095
复制相似问题