合并data.table由两个变量和最接近的第三个

时间:2013-12-09 16:38:59

标签: r merge dataframe data.table

我想对data.tables执行一个操作,我目前可以成功地使用data.frames。本质上,它是两个data.frames的合并函数,它找到df2中与df1最接近的匹配,用于许多匹配变量之一。此代码如下。

我想在data.tables中执行此操作,因为我的data.frames非常大,如果我尝试在完整数据上完成此操作,我的当前设置会崩溃。 Data.table,可能允许我在完整集上完成它,但如果没有,我发现data.table在使用多个数据子集时更容易使用。

我正在寻找来自df2的Id(及其相应的value),其与df1中State s value的最接近匹配变量{{ 1}}和MM(在此data.frame方法中,如果存在最接近的匹配关系,则可能发生多个配对(例如,存在加1和减1的值))。使用data.frames时,我得到的解决方案为variable。我不知道如何设置data.table给我相同的结果。我试过我的钥匙的变化,下面是一个例子。在我在代码中引用的data.frame问题中有一个answer使用data.table,但是,我无法使用它来处理我的示例数据。

final

1 个答案:

答案 0 :(得分:3)

不确定这是否是实现您想要的最佳方式,但这里有一种类似于数据帧的方法,只使用data.tables:

dt1 <- data.table(df1)
dt2 <- data.table(df2)
res <- merge(dt1, dt2, by = c("MM", "variable"), all.x = TRUE, allow.cartesian=TRUE)
final_dt <- res[, .SD[abs(value.x - value.y) == min(abs(value.x - value.y))], by=c("State", "MM", "variable")]

请注意,final_dt中的结果与final中的结果(状态= AK,MM = 3,变量= TMX)不同,即使根据上述方法,您的方法也不会返回匹配在你的描述中,应该返回一个匹配。