R 执行连接时,从关键帧中的重复项中随机选择值

R 执行连接时,从关键帧中的重复项中随机选择值,r,join,dplyr,R,Join,Dplyr,我希望在数据框中创建一个新的位置变量,使用参考数据框中按郊区和邮政编码的键。然而,由于澳大利亚悉尼地理结构的性质,参考数据框架在关键点上存在重叠/重复。看起来是这样的——邮政编码和郊区是关键变量,但它们之间有重叠。我正在从引用df为数据帧中的行分配一个郊区 df <- tibble(vars = sample(c(1:5), 10, replace = T), postcode = c(2022,2204,2016,2000,2007,2008,2022,200

我希望在数据框中创建一个新的位置变量,使用参考数据框中按郊区和邮政编码的键。然而,由于澳大利亚悉尼地理结构的性质,参考数据框架在关键点上存在重叠/重复。看起来是这样的——邮政编码和郊区是关键变量,但它们之间有重叠。我正在从引用df为数据帧中的行分配一个郊区

df <- tibble(vars = sample(c(1:5), 10, replace = T), 
             postcode = c(2022,2204,2016,2000,2007,2008,2022,2008,2008,2000))
df_ref <- tibble(postcode = c(2000,2000,2007,2008,2008,2022,2204),
                 suburb = c('Haymarket','Woolloomooloo','Ultimo','Darlington','Redfern','Bondi Jct','Marrickville'))
这并没有达到我想要达到的效果,相反,一个解决方案,只要一个重叠出现在连接中,就随机选择一个重叠,这将是更可取的


dplyr
/
tidyverse
语言更可取,但如果
data.table
是方法,这可能会迫使我坐下来真正学习它

您可以将两个数据帧连接起来,并为每一行选择任意一个随机的

library(dplyr)

df %>%
  mutate(row = row_number()) %>%
  left_join(df_ref, by = 'postcode') %>%
  group_by(row) %>%
  slice_sample(n = 1)

您可以连接两个数据帧,并为每一行选择任意一个随机

library(dplyr)

df %>%
  mutate(row = row_number()) %>%
  left_join(df_ref, by = 'postcode') %>%
  group_by(row) %>%
  slice_sample(n = 1)

如果您希望每一行获得一个可能不同的匹配,那么您可能需要执行一个完整的连接,然后仅使用子集来保留其中一个匹配。比如说

df %>%
  mutate(record_index = row_number()) %>% 
  left_join(df_ref) %>% 
  group_by(postcode) %>% 
  slice_sample(1) %>% 
  select(-record_index)

如果您希望每一行获得一个可能不同的匹配,那么您可能需要执行一个完整的连接,然后仅使用子集来保留其中一个匹配。比如说

df %>%
  mutate(record_index = row_number()) %>% 
  left_join(df_ref) %>% 
  group_by(postcode) %>% 
  slice_sample(1) %>% 
  select(-record_index)