簡體   English   中英

R:不等連接與合並 function

[英]R: unequi join with merge function

我正在使用data.table ,我想做一個非 equi 左連接/合並。

我有一張汽車價格表和另一張表來識別每輛車屬於哪輛車 class :

data_priceclass <- data.table()
data_priceclass$price_from <- c(0, 0, 200000, 250000, 300000, 350000, 425000, 500000, 600000, 700000, 800000, 900000, 1000000, 1100000, 1200000, 1300000, 1400000, 1500000, 1600000, 1700000, 1800000) 
data_priceclass$price_to <- c(199999, 199999, 249999, 299999, 349999, 424999, 499999, 599999, 699999, 799999, 899999, 999999, 1099999, 1199999, 1299999, 1399999, 1499999, 1599999, 1699999, 1799999, 1899999)
data_priceclass$price_class <- c(1:20, 99)

我使用非 equi 連接來合並這兩個表。 但是data.table的 x[y]-join 語法刪除了重復項。

cars <- data.table(car_price = c(190000, 500000))
cars[data_priceclass, on = c("car_price >= price_from", 
                             "car_price < price_to"),
     price_class := i.price_class,]
cars

請注意,值為 190000 的汽車應該在data_priceclass表中的兩行上得到匹配,但由於 x[y] 刪除了重復項,因此我在 output 中看不到這一點。 通常,當我加入時,我總是使用merge function 而不是 x[y],因為我在使用 x[y] 時會失去控制。

但以下不適用於非 equi 連接:

merge(cars, data_priceclass,
      by = c("car_price >= price_from", 
             "car_price < price_to"),
      all.x = T , all.y = F)

任何提示我如何使用不刪除重復項的 data.table 進行非 equi 連接?

如評論中所述, cars的左連接是通過在DT[i,j,by]語法中使用cars作為子集條件i來完成的。
這將cars放在右邊,與SQL相比,這可能是違反直覺的,我發現本教程對於比較兩種語法很有用。

cars <- data.table(car_price = c(190000, 500000))
data_priceclass[cars, .(car_price,x.price_from,x.price_to,price_class),on = .(price_from <= car_price,price_to > car_price)]

   car_price x.price_from x.price_to price_class
1:    190000        0e+00     199999           1
2:    190000        0e+00     199999           2
3:    500000        5e+05     599999           8

如果你提高汽車價格:

cars <- cars * 10
data_priceclass[cars, .(car_price,x.price_from,x.price_to,price_class),on = .(price_from <= car_price,price_to > car_price)]

   car_price x.price_from x.price_to price_class
1:   1900000           NA         NA          NA
2:   5000000           NA         NA          NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM