R 在多个模糊匹配上合并2个数据表
我有两个data.tables,它们的变量名顺序不明确: 我想合并dt1和dt2。但实际上,无论信息在哪一列,我都想加入R 在多个模糊匹配上合并2个数据表,r,R,我有两个data.tables,它们的变量名顺序不明确: 我想合并dt1和dt2。但实际上,无论信息在哪一列,我都想加入 dt3=inner_join(dt1,dt2,by=c('Col1','Col2')) #Won't join all 4;only 2. 我无法统一这些列,因为实际上有许多列(>100),并且它们无法可靠地排序)。有没有一种方法可以将这四种观察结合起来 > dput(dt1) structure(list(Col1 = c("Todd", "Leroy", "
dt3=inner_join(dt1,dt2,by=c('Col1','Col2')) #Won't join all 4;only 2.
我无法统一这些列,因为实际上有许多列(>100),并且它们无法可靠地排序)。有没有一种方法可以将这四种观察结合起来
> 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'))
dt1所以您只想通过行名(Obs1,Obs2,…)加入?加入后,您希望的输出是什么样子的?希望为了清晰起见进行了编辑。最初数据的dput
构造不良,列名称为第1行。修复了dput并删除了内部自指针(对我造成了问题),将无法生成合并id