你好,我有一个简单的问题,我无法弄清data.table
library(data.table)
X = structure(list(id = c("1544546095089426537", "1544546096067952694",
"1544546097110012530", "1544546098119312996", "1544546099138807323",
"1544546100158707601", "1544546101162116936", "1544546102181067223",
"1544546103195166875", "1544546103195166875", "1544546103195166875",
"1544546106224788360", "1544546106224788360", "1544546108267033496",
"1544546108267033496", "1544546110293800776", "1544546110293800776",
"1544546112321694403", "1544546112321694403", "1544546114351588355",
"1544546114351588355", "1544546116381551556", "1544546116381551556",
"1544546118406016434", "1544546118406016434", "1544546120433126896",
"1544546120433126896", "1544546122461220617", "1544546122461220617",
"1544546124489327694", "1544546124489327694", "1544546126517474819",
"1544546126517474819", "1544546126517474819"), IDX = c(637197L,
639751L, 641225L, 643656L, 645993L, 650042L, 652171L, 654794L,
657097L, 659672L, 662427L, 664974L, 667283L, 669609L, 671840L,
673826L, 675517L, 677878L, 679745L, 681284L, 682426L, 685156L,
687228L, 689568L, 692729L, 693825L, 695525L, 697468L, 698269L,
700319L, 702261L, 706292L, 707375L, 708272L), original_id = c("1544546095089426537",
"1544546095089426537", "1544546096067952694", "1544546097110012530",
"1544546098119312996", "1544546099138807323", "1544546100158707601",
"1544546101162116936", "1544546102181067223", "1544546103195166875",
"1544546103195166875", "1544546103195166875", "1544546106224788360",
"1544546106224788360", "1544546108267033496", "1544546108267033496",
"1544546110293800776", "1544546110293800776", "1544546112321694403",
"1544546112321694403", "1544546114351588355", "1544546114351588355",
"1544546116381551556", "1544546116381551556", "1544546118406016434",
"1544546118406016434", "1544546120433126896", "1544546120433126896",
"1544546122461220617", "1544546122461220617", "1544546124489327694",
"1544546124489327694", "1544546126517474819", "1544546126517474819"
)), .Names = c("id", "IDX", "original_id"), row.names = c(NA,
-34L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x12c7bf8>)
X
id IDX original_id
1: 1544546095089426537 637197 1544546095089426537
2: 1544546096067952694 639751 1544546095089426537
3: 1544546097110012530 641225 1544546096067952694
4: 1544546098119312996 643656 1544546097110012530
5: 1544546099138807323 645993 1544546098119312996
6: 1544546100158707601 650042 1544546099138807323
7: 1544546101162116936 652171 1544546100158707601
8: 1544546102181067223 654794 1544546101162116936
9: 1544546103195166875 657097 1544546102181067223
10: 1544546103195166875 659672 1544546103195166875
11: 1544546103195166875 662427 1544546103195166875
12: 1544546106224788360 664974 1544546103195166875
13: 1544546106224788360 667283 1544546106224788360
14: 1544546108267033496 669609 1544546106224788360
15: 1544546108267033496 671840 1544546108267033496
16: 1544546110293800776 673826 1544546108267033496
17: 1544546110293800776 675517 1544546110293800776
18: 1544546112321694403 677878 1544546110293800776
19: 1544546112321694403 679745 1544546112321694403
20: 1544546114351588355 681284 1544546112321694403
21: 1544546114351588355 682426 1544546114351588355
22: 1544546116381551556 685156 1544546114351588355
23: 1544546116381551556 687228 1544546116381551556
24: 1544546118406016434 689568 1544546116381551556
25: 1544546118406016434 692729 1544546118406016434
26: 1544546120433126896 693825 1544546118406016434
27: 1544546120433126896 695525 1544546120433126896
28: 1544546122461220617 697468 1544546120433126896
29: 1544546122461220617 698269 1544546122461220617
30: 1544546124489327694 700319 1544546122461220617
31: 1544546124489327694 702261 1544546124489327694
32: 1544546126517474819 706292 1544546124489327694
33: 1544546126517474819 707375 1544546126517474819
34: 1544546126517474819 708272 1544546126517474819
id IDX original_id
基本上,我有一个id <-> IDX
映射和另一列original_id
,我想添加一列original_IDX
,以便对每一行i
,original_IDX_i
是IDX
值中IDX[id == original_d_i]
的最后一个original_IDX_i<IDX_i
值(最大)
我希望前12行是
id IDX original_id original_IDX
1: 1544546095089426537 637197 1544546095089426537 NA
2: 1544546096067952694 639751 1544546095089426537 637197
3: 1544546097110012530 641225 1544546096067952694 639751
4: 1544546098119312996 643656 1544546097110012530 641225
5: 1544546099138807323 645993 1544546098119312996 643656
6: 1544546100158707601 650042 1544546099138807323 645993
7: 1544546101162116936 652171 1544546100158707601 650042
8: 1544546102181067223 654794 1544546101162116936 652171
9: 1544546103195166875 657097 1544546102181067223 654794
10: 1544546103195166875 659672 1544546103195166875 657097
11: 1544546103195166875 662427 1544546103195166875 659672
12: 1544546106224788360 664974 1544546103195166875 662427
答案 0 :(得分:2)
您可以使用非等额联接,然后通过引用进行更新,如下所示:
X[, mi := X[X, on=.(id=original_id, IDX<IDX), max(x.IDX)]$V1]
输出:
id IDX original_id mi
1: 1544546095089426537 637197 1544546095089426537 NA
2: 1544546096067952694 639751 1544546095089426537 637197
3: 1544546097110012530 641225 1544546096067952694 639751
4: 1544546098119312996 643656 1544546097110012530 641225
5: 1544546099138807323 645993 1544546098119312996 643656
6: 1544546100158707601 650042 1544546099138807323 645993
7: 1544546101162116936 652171 1544546100158707601 650042
8: 1544546102181067223 654794 1544546101162116936 652171
9: 1544546103195166875 657097 1544546102181067223 654794
10: 1544546103195166875 659672 1544546103195166875 657097
11: 1544546103195166875 662427 1544546103195166875 659672
12: 1544546106224788360 664974 1544546103195166875 662427
13: 1544546106224788360 667283 1544546106224788360 664974
14: 1544546108267033496 669609 1544546106224788360 667283
15: 1544546108267033496 671840 1544546108267033496 669609
16: 1544546110293800776 673826 1544546108267033496 671840
17: 1544546110293800776 675517 1544546110293800776 673826
18: 1544546112321694403 677878 1544546110293800776 675517
19: 1544546112321694403 679745 1544546112321694403 677878
20: 1544546114351588355 681284 1544546112321694403 679745
21: 1544546114351588355 682426 1544546114351588355 681284
22: 1544546116381551556 685156 1544546114351588355 682426
23: 1544546116381551556 687228 1544546116381551556 685156
24: 1544546118406016434 689568 1544546116381551556 687228
25: 1544546118406016434 692729 1544546118406016434 689568
26: 1544546120433126896 693825 1544546118406016434 692729
27: 1544546120433126896 695525 1544546120433126896 693825
28: 1544546122461220617 697468 1544546120433126896 695525
29: 1544546122461220617 698269 1544546122461220617 697468
30: 1544546124489327694 700319 1544546122461220617 698269
31: 1544546124489327694 702261 1544546124489327694 700319
32: 1544546126517474819 706292 1544546124489327694 702261
33: 1544546126517474819 707375 1544546126517474819 706292
34: 1544546126517474819 708272 1544546126517474819 707375
id IDX original_id mi
答案 1 :(得分:2)
以下提供@ chinsoon12似乎可以达到相同的结果
X[X, on = .(original_id=id, IDX>IDX), original_IDX:=i.IDX]