r - 在R中合并两个具有不同行的数据框
问题描述
我有两个 df,每个来自不同的来源。它们都引用了相同的信息,但其中有一个我感兴趣的附加列。
head(df1)
DISTRICT_NAMES
<chr>
1 HUANUCO
2 SAN MARTIN DE PORRES
3 ANCON
4 RIMAC
5 JESUS MARIA
6 VILLA MARIA DEL TRIUNFO
#df1 have 1690 obs.
head(df2)
UBIGEO DISTRICT_NAMES POP
<dbl> <chr> <dbl>
1 10101 HUÁNUCO 32589
2 10102 SAN-MARTIN-DE-PORRES 262
3 10103 ANCÓN 1136
4 10104 RÍMAC 642
5 10105 JESÚS-MARÍA 585
6 10106 VILLA MARÍA DEL TF 1781
#df2 have 1874 obs.
如您所见,'DISTRICT_NAMES' 列在两个 df 中具有相似的值,尽管不相同。由于目前的数据框,我无法通过merge
函数合并它们,这是我的最终意图。
我的查询是是否有办法告诉 R:“如果一行的值在 7 个字母中的 3 个与另一行匹配,则假设它们相同并继续合并”。
解决方案
这是一个可能有帮助的策略:
- 在其中创建一个新列
DISTRICT_NAMES_1
,df1
并df2
用正则表达式替换所有非字母字符,"[^[:alnum:]]"
以便 - 然后你可以执行一个
left_join
- 现在,您将所有数据与新列匹配的位置
df1
合并,如果没有匹配,则得到 NA。df2
DISTRICT_NAMES_1
- 现在您可以进行进一步的数据整理。
注意我不确定这个策略是否会成功,但你可以试试!
library(dplyr)
df1_new <- df1 %>%
mutate(DISTRICT_NAMES_1 = str_replace_all(DISTRICT_NAMES, "[^[:alnum:]]", "")) %>%
arrange(DISTRICT_NAMES_1)
df2_new <- df2 %>%
mutate(DISTRICT_NAMES_1 = str_replace_all(DISTRICT_NAMES, "[^[:alnum:]]", "")) %>%
arrange(DISTRICT_NAMES_1)
df_result <- df1_new %>%
left_join(df2_new, by="DISTRICT_NAMES_1")
输出:
> df_result
# A tibble: 1,827 x 5
DISTRICT_NAMES.x DISTRICT_NAMES_1 UBIGEO DISTRICT_NAMES.y POP
<chr> <chr> <dbl> <chr> <dbl>
1 ABANCAY ABANCAY 30101 ABANCAY 69028
2 ABELARDO PARDO LEZAMETA ABELARDOPARDOLEZAMETA 20502 ABELARDO PARDO LEZAMETA 244
3 ACARI ACARI NA NA NA
4 ACAS ACAS 21402 ACAS 656
5 ACCHA ACCHA 81002 ACCHA 3028
6 ACCOMARCA ACCOMARCA 51102 ACCOMARCA 886
7 ACHAYA ACHAYA 210202 ACHAYA 2826
8 ACHOMA ACHOMA 40502 ACHOMA 841
9 ACO ACO 20902 ACO 379
10 ACO ACO 120202 ACO 1642
推荐阅读
- c++ - 这个 sprintf 的 C++ 等价物是什么?
- java - Android 应用程序在空对象引用上不断崩溃“android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()”
- c++ - cppreferece中shared_ptr构造函数的定义是否错误?
- javascript - 单击链接后如何折叠 Bootstrap React 导航栏?
- javascript - Javascript非人类可读变量/函数声明
- javascript - 有没有办法测量导入文件需要多少时间?
- python-3.x - IntelliJ 堆空间限制
- c - 用于使用循环(环形)缓冲区实现的嵌入式系统的 C 记录器库在主文件中不起作用
- typescript - TypeScript 参数交集减少到从不
- django - 如何根据前一个字段中的选择动态更新 django 表单字段查询集?