我想从y中选择与x中的字符串匹配的n行,其中n = x的长度,但y中的同一行不应多次选择。应从y中随机选择行。
> head(x$Age_Yrs_Sex)
[1] "65_0" "72_1" "82_0" "52_0" "81_0" "58_0"
> head(y,20)
ID Age_Yrs_Sex
1 10678800017 30_0
2 106788000024 63_0
4 10678800048 59_0
5 1067880000055 68_1
7 1067800079 59_0
8 10678800086 36_1
10 10678000109 39_0
12 1067880123 42_0
13 10678800130 45_1
14 106788000147 49_1
15 1067880000154 24_0
16 106780000161 44_0
17 1067880000178 43_1
19 106780000192 79_0
20 106880000208 22_0
22 107880000222 89_0
23 167880000239 28_0
24 106788000246 44_1
25 106780000253 76_0
26 106780000260 45_1
答案 0 :(得分:1)
假设x
中的条目总是小于y
中给定匹配的条目,这应该有效(使用dplyr
)。在此处生成可用的示例数据:
y <-
data.frame(
ID = 1:1000
, Age_Yrs_Sex = paste(sample(1:10, 1000, TRUE)
, 0:1
, sep = "_")
)
x <-
data.frame(
Age_Yrs_Sex = paste(c(1,1:4), 0, sep = "_")
)
计算每件事的匹配数(如果总是1则可以跳过)
matches <-
table(x$Age_Yrs_Sex)
将表格过滤为匹配项,然后从每个组中选择上表中找到的匹配项数(使用slice
,从1到行数随机抽样行数,返回结果数表中的那场比赛)。
y %>%
filter(Age_Yrs_Sex %in% names(matches)) %>%
group_by(Age_Yrs_Sex) %>%
slice(sample(1:n(), matches[as.character(Age_Yrs_Sex[1])]))
给(例如):
ID Age_Yrs_Sex
<int> <fctr>
1 95 1_0
2 777 1_0
3 151 2_0
4 951 3_0
5 403 4_0