Выберите случайные строки, которые соответствуют строке - PullRequest
0 голосов
/ 04 января 2019

Я хочу случайным образом выбрать строки из df2, которые соответствуют Birth_Sex.Количество выбранных строк должно быть равно количеству строк в df1 (2 в этом примере).

df1

  Birth_Sex
  1999_1
  1969_1

df2

 ID          Birth_Sex
 123113      1999_1
 123123      1992_0
 123233      1959_0
 124513      1969_1
 124993      1969_1
 124545      1969_1

Пример вывода

 ID          Birth_Sex
 124545      1969_1
 123113      1999_1

Ответы [ 3 ]

0 голосов
/ 04 января 2019

С dplyr

library(dplyr)
 df2 %>% 
   inner_join(df1) %>% 
   group_by(Birth_Sex) %>% 
   sample_n(1)
Joining, by = "Birth_Sex"
# A tibble: 2 x 2
# Groups:   Birth_Sex [2]
      ID Birth_Sex
   <int> <chr>    
1 124993 1969_1   
2 123113 1999_1  
0 голосов
/ 04 января 2019

Вот и решение data.table

library(data.table)

setDT(df1)[setDT(df2), nomatch = 0L,on = 'Birth_Sex'][, .SD[sample(.N, 1)], by = Birth_Sex]

#   Birth_Sex     ID
#1:    1969_1 124513
#2:    1999_1 123113
0 голосов
/ 04 января 2019

Для каждой записи Birth_Sex в df1 сначала мы находим номера строк, которые имеют эту запись в df2, и выбираем индекс любой строки для подмножества df2.

df2[sapply(df1$Birth_Sex, function(x) {
      inds = which(df2$Birth_Sex %in% x)
     if(length(inds) > 1) sample(inds, 1) else inds
}), ]


#      ID Birth_Sex
#1 123113    1999_1
#4 124513    1969_1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...