Je souhaite sélectionner au hasard des lignes de df2 qui correspondent à Birth_Sex . Le nombre de lignes sélectionnées doit être égal au nombre de lignes dans df1 (2 dans cet exemple).
df1
ID Birth_Sex 124545 1969_1 123113 1999_1
df2
ID Birth_Sex 123113 1999_1 123123 1992_0 123233 1959_0 124513 1969_1 124993 1969_1 124545 1969_1
Exemple de sortie
Birth_Sex 1999_1 1969_1
3 Réponses :
Pour chaque entrée de Birth_Sex dans df1 , nous trouvons d'abord les numéros de ligne qui ont cette entrée dans df2 et sélectionnons l'index d'une ligne au sous-ensemble 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
Avec 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
Voici également la solution 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