r - 对齐两个数据框以提高 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。
解决方案
我不确定我是否理解正确。如果您只想比较列,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
推荐阅读
- bash - 每次打开终端时出现 $PATH 错误
- swift - CNContactPickerViewController - 无法进行任何选择
- c# - 使用 MongoDB C# 驱动程序更新列表中的字段
- ios - Swift 4.1:UIPickerView 的 SelectRow 不会引发委托 didSelectRow
- java - 如何加载 HTML 的全部内容 - Jsoup
- python - 如何从保存的预训练模型的h5文件中找到层数?
- reactjs - react-select中选项的禁用原因
- export-to-excel - jsreport html-to-excel 选项
- android - 如何在联系人上添加自定义按钮以使用我的应用程序打开?
- java - 如果一个成员离开聊天,如何向其他 Twilio Chat 成员发送通知?