对齐两个数据框以提高R中的匹配精度

时间:2019-07-05 13:01:07

标签: r dataframe dplyr string-matching

假设我有两个看起来像这样的数据框:

df1
ID  Chr
1   a
2   a
3   a
4   a
5   a
6   a
7   b
8   b
9   b
10  b
11  c
12  c
13  a
14  a
15  a
16  a
17  c
18  c
19  c
20  a
df2
ID Chr
1   a
2   a
3   b
4   b
5   b
6   b
7   b
8   b
9   b
10  b
11  c
12  c
13  a
14  a
15  c
16  c
17  c
18  a
19  a
20  a

如果查看两个df,您会发现它们非常相似。实际上,如果是这样,我认为它们是同一集合的一部分。但问题是它们之间的对齐方式不太好。在这个小样本中,看起来似乎没什么大不了,但是对于具有1000行以上的实际数据,对齐是个大问题。

问题是我的匹配算法非常基础,将df1的一行与df2的相应行进行比较,给出1的分数表示存在匹配,0表示不匹配。使问题复杂化的是,我也不一次匹配数据帧的所有行。由于这种情况,我必须进行部分比赛。例如,使用上述数据,我将匹配5行。 df1的前五行与df2的五行。当我最小化规模时,问题变得更糟。

所以问题是我可以对对齐方式做些什么,而不必立即匹配整个dfs。

1 个答案:

答案 0 :(得分:2)

我不确定我是否正确理解你。 如果只想比较chr列,则可以将两个表连接起来,然后检查chr列。

如果使用dplyr软件包,这非常容易。 首先,我创建一些玩具数据:

df1 <- data.frame(id = 1:5, chr = c("a", "a", "a", "b", "b"))
df2 <- data.frame(id = 1:5, chr = c("a", "b", "b", "b", "b"))

library(dplyr)
left_join(df1, df2, by = "id", suffix = c("_1", "_2")) %>% 
  mutate(flag = if_else(chr_1 == chr_2, 1, 0))

  id chr_1 chr_2 flag
1  1     a     a    1
2  2     a     b    0
3  3     a     b    0
4  4     b     b    1
5  5     b     b    1