R:合并两个data.table,同时过滤唯一ID:仅将NA作为答案

我的问题如下: 我需要分析具有多个条目的几个不同文件中的数据(每列最多500.000,总共10列)。 这些文件通过使用ID(例如, ORDER_ID。 但是,这些ID可能会出现多次,例如当订单包含多个订单行时。也有可能一个ID没有出现在其中一个文件中,例如因为包含销售数据的文件仅包含有关已发货订单的信息,而没有有关尚未发货的订单的信息。

因此,我有不同长度和唯一ID的不同文件,这些ID标识了在所有数据文件上的外观(是否存在)可能不同的位置。 我现在想要的是按ID过滤一个文件,以便它仅显示另一个文件中列出的ID。另外,应该将第一个文件中的其他列移到上方。

我所拥有的例子: dt1:

ORDER_ID        SKU_ID          Quantity_Shipped
12345            678910           100
12346            648392            30
64739            648392            20

dt2:

ORDER_ID        Country
12345              DE
12346              DE
55430              SE
90632              JPN
76543              ARG
64739              CH

我想要什么:

ORDER_ID        SKU_ID          Quantity_Shipped     Country
12345            678910           100                 DE
12346            648392            30                 DE
64739            648392            20                 CH

最初,数据是从csv文件导入的。 到目前为止,我使用的方法在合并两个文件时有效。 当尝试从第三个文件中添加信息时,我只得到NA作为答案。我该怎么做才能解决此问题?

这是我到目前为止使用的方法。

df2 <- data.frame(ORDER_ID = sales[["ORDER_ID"]])
df1 <- data.frame(ORDER_ID = OL[["ORDER_ID"]],SKU_ID = OL[["SKU_ID"]],QTY_SHIPPED = OL[["QTY_SHIPPED"]],EXPECTED_VOLUME = 
              OL[["EXPECTED_VOLUME"]])
library(data.table)
dt2 <- data.table(df1)
dt1 <- data.table(df2)

dt3 <- dt2[match(dt1$ORDER_ID,dt2$ORDER_ID),]
yszwei02 回答:R:合并两个data.table,同时过滤唯一ID:仅将NA作为答案

您可以在data.table中使用固有的“合并”,也可以使用显式的merge命令(也正在调用data.table S3方法,但这在这里并不完全重要)。

dt2[dt1,on = "ORDER_ID"]
#    ORDER_ID Country SKU_ID Quantity_Shipped
# 1:    12345      DE 678910              100
# 2:    12346      DE 648392               30
# 3:    64739      CH 648392               20

merge(dt1,dt2,by = "ORDER_ID")

有时,我更喜欢merge调用的清晰度,因为我可以控制左右方向和其他方面(如果上面的默认首次使用不能满足我的要求)。我发现https://rstudio-pubs-static.s3.amazonaws.com/52230_5ae0d25125b544caab32f75f0360e775.html对于左/右和其他联接类型有很好的参考。

merge不能充分发挥作用的一种情况是您正在使用data.table::foverlaps或扩展固有方法进行范围联接:

# with mythical data,joining on `dat1$val` within `dat2$val` and `dat2$val2`
dat1[dat2,on = .( val >= val1 & val <= val2 )]
本文链接:https://www.f2er.com/3116272.html

大家都在问