Simultaneous fuzzy and non-fuzzy join

前端 未结 1 721
醉话见心
醉话见心 2021-01-15 14:51

Say I have this data frame:

# Set random seed
set.seed(33550336)

# Number of IDs
n <- 5

# Create data frames
df <- data.frame(ID = rep(1:n, each = 10         


        
相关标签:
1条回答
  • 2021-01-15 15:50

    In my opinion the data.table package is best suited for this job:

    library(data.table)
    setDT(df)
    setDT(df_alt)
    
    df_alt[df
           , on = .(ID, loc)
           , roll = "nearest"
           , .(ID, loc.x = i.loc, loc.y = x.loc, value, delta = abs(i.loc - x.loc))]
    

    which gives:

        ID loc.x loc.y     value delta
     1:  1    10     7 0.8744985     3
     2:  1    20     7 0.8744985    13
     3:  1    30    36 0.4724253     6
     4:  1    40    38 0.2016645     2
     5:  1    50    53 0.4750352     3
     6:  1    60    53 0.4750352     7
     7:  1    70    72 0.4750352     2
     8:  1    80    74 0.4724253     6
     9:  1    90    92 0.3202490     2
    10:  1   100    95 0.2016645     5
    11:  2    10    10 0.2016645     0
    12:  2    20    25 0.3202490     5
    13:  2    30    31 0.2016645     1
    14:  2    40    31 0.2016645     9
    15:  2    50    52 0.8744985     2
    16:  2    60    60 0.4724253     0
    17:  2    70    62 0.4750352     8
    18:  2    80    87 0.4750352     7
    19:  2    90    87 0.4750352     3
    20:  2   100    87 0.4750352    13
    21:  3    10     7 0.8744985     3
    22:  3    20     7 0.8744985    13
    23:  3    30    36 0.4724253     6
    24:  3    40    38 0.2016645     2
    25:  3    50    51 0.2016645     1
    26:  3    60    53 0.4750352     7
    27:  3    70    53 0.4750352    17
    28:  3    80    87 0.3202490     7
    29:  3    90    91 0.8744985     1
    30:  3   100    91 0.8744985     9
    31:  4    10    10 0.2016645     0
    32:  4    20    11 0.8744985     9
    33:  4    30    11 0.8744985    19
    34:  4    40    61 0.3202490    21
    35:  4    50    61 0.3202490    11
    36:  4    60    61 0.3202490     1
    37:  4    70    72 0.4750352     2
    38:  4    80    74 0.4724253     6
    39:  4    90    92 0.3202490     2
    40:  4   100    95 0.2016645     5
    41:  5    10     3 0.3202490     7
    42:  5    20    25 0.3202490     5
    43:  5    30    31 0.2016645     1
    44:  5    40    43 0.4724253     3
    45:  5    50    51 0.2016645     1
    46:  5    60    60 0.4724253     0
    47:  5    70    62 0.4750352     8
    48:  5    80    91 0.8744985    11
    49:  5    90    91 0.8744985     1
    50:  5   100    91 0.8744985     9
    
    0 讨论(0)
提交回复
热议问题