R 选择与字符串匹配的随机行

R 选择与字符串匹配的随机行,r,R,我想从df2中随机选择与出生性别匹配的行。在本例中,选定的行数应等于df1 2中的行数 df1 df2 示例输出 ID Birth_Sex 124545 1969_1 123113 1999_1 对于df1中的每个出生性别条目,我们首先找到df2中具有该条目的行号,然后选择任何一行的索引作为df2的子集 对于df1中的每个出生性别条目,我们首先找到df2中具有该条目的行号,然后选择任何一行的索引作为df2的子集 用dplyr 用dplyr 这也是da

我想从df2中随机选择与出生性别匹配的行。在本例中,选定的行数应等于df1 2中的行数

df1

df2

示例输出

 ID          Birth_Sex
 124545      1969_1
 123113      1999_1
对于df1中的每个出生性别条目,我们首先找到df2中具有该条目的行号,然后选择任何一行的索引作为df2的子集

对于df1中的每个出生性别条目,我们首先找到df2中具有该条目的行号,然后选择任何一行的索引作为df2的子集

用dplyr

用dplyr

这也是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
这也是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
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
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  
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