r - 在多个模糊匹配上合并 2 个 data.tables
问题描述
我有 2 个 data.tables 具有不相关的变量名称,顺序不明确:
我想合并 dt1 和 dt2。但实际上,无论信息在哪一列,我都想加入。
dt3=inner_join(dt1,dt2,by=c('Col1','Col2')) #Won't join all 4;only 2.
我无法合并这些列,因为实际上有很多(> 100)并且它们不能可靠地被订购)。有没有办法将这些结合起来,以便将所有 4 个观察结果结合起来?
> dput(dt1)
structure(list(Col1 = c("Todd", "Leroy", "Ham", "Tiffon"), Col2 = c("Sally",
"Brown", "York", "Maude"), Y1 = c(687.4, 12.9, 34.6, 34.6)), row.names = c(NA,
-4L), class = c("data.table", "data.frame"))
> dput(dt2)
structure(list(Col1 = c("Sally", "Leroy", "York", "Tiffon"),
Col2 = c("Todd", "Brown", "Ham", "Maude"), Y1 = c(343.1,
5748.6, 942.5, 365.5)), row.names = c(NA, -4L), class = c("data.table",
"data.frame"))
所需的输出(不要关心它如何输出 Col1,Col2 变量):
解决方案
我不知道,如果我理解你的问题是正确的。但是如何生成一个排序的合并 id。可以使用合并 id。
dt1 <- structure(list(V1 = c("Obs1", "Obs2", "Obs3", "Obs500"),
V2 = c("Sally", "Leroy", "York", "Tiffon"),
V3 = c("Todd", "Brown", "Ham", "Maude")),row.names = c(NA, -4L),
class = c("data.frame"))
dt1
dt2 <- structure(list(V1 = c("Obs1", "Obs2", "Obs3", "Obs500"),
V2 = c("Todd", "Leroy", "Ham", "Tiffon"),
V3 = c("Sally", "Brown", "York", "Maude")), row.names = c(NA, -4L),
class = c("data.frame"))
dt2
columns <- c("V2","V3")
order_paste <- function (x) {
x_sorted <- sort(x)
x_sorted_paste <- paste(x_sorted,collapse = "")
return(x_sorted_paste)
}
dt1$merge_id <- apply(dt1[columns],1, order_paste)
dt2$merge_id <- apply(dt2[columns],1, order_paste)
dt3<-dplyr::inner_join(dt1,dt2,by=c('merge_id'))
推荐阅读
- c# - 带有 LiveCharts 的 WPF 在运行时添加带有 DataBinding 的系列
- reactjs - React + TypeScript 中的 setState:FormData 不是“Blob”类型
- python - Dockerfile 未安装最新的 pypi 版本
- typo3 - 将设置传递给 FLUIDTEMPLATE
- python - 当 oneTimeSetup 方法具有固定范围 =“会话”时出现错误
- angular - Angular - 对多个路径使用相同的模块
- authorization - Azure 数据工厂 - 在不同资源组上共享集成运行时
- database - 使用 DBMS_DATAPUMP api 从不同的模式导出表
- python - 使用 Python Sphinx 向模块文档字符串添加参数
- python - 日期表达式轴的本地化