首页 > 解决方案 > 对齐两个数据框以提高 R 中的匹配精度

问题描述

假设我有两个如下所示的数据框:

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

如果您查看两个 dfs,您会发现它们非常相似。事实上,如果是这样,我认为它们是同一组的一部分。但问题是它们并没有很好地对齐。在这个小样本中,它可能看起来没什么大不了的,但对于超过 1000 行的实际数据,对齐是一个大问题。

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

所以问题是我可以对对齐做一些事情,而不必一次匹配整个 dfs。

标签: rdataframedplyrstring-matching

解决方案


我不确定我是否理解正确。如果您只想比较列,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

推荐阅读