【问题标题】:Aligning two dataframes to improve matching accuracy in R对齐两个数据框以提高 R 中的匹配精度
【发布时间】:2019-11-16 02:52:27
【问题描述】:

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

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。

【问题讨论】:

  • 您是否在搜索类似these 的内容?

标签: r dataframe dplyr string-matching


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多