R 查找匹配记录的匹配对及其ID

R 查找匹配记录的匹配对及其ID,r,dplyr,data.table,tidyr,R,Dplyr,Data.table,Tidyr,我有一个巨大的数据集,需要根据一些标准匹配样本。例如,对于某个地区和自治区的每一位电影明星,请随机为我找到两个不是电影明星的人。电影明星为1,非电影明星为0 location<- c('manhattan', 'manhattan' ,'manhattan', 'manhattan', 'manhattan', 'manhattan') moviestar<- c(0,1,0,0,0,1) id<- c(1,2,3,4,5,6) borough <- c('willia

我有一个巨大的数据集,需要根据一些标准匹配样本。例如,对于某个地区和自治区的每一位电影明星,请随机为我找到两个不是电影明星的人。电影明星为1,非电影明星为0

location<- c('manhattan', 'manhattan' ,'manhattan', 'manhattan', 'manhattan', 'manhattan')
moviestar<- c(0,1,0,0,0,1)
id<- c(1,2,3,4,5,6)
 borough <- c('williamsburg', 'williamsburg', 'williamsburg', 'williamsburg', 'williamsburg','williamsburg')

 df<- data.frame(location,moviestar, borough, id)
这应该做到:

library(data.table)
setDT(df)[, .(moviestar.id = id[moviestar == 1],
              match.id = sample(id[moviestar == 0], 2*sum(moviestar == 1)))
          , by = .(location, borough)]
#    location      borough moviestar.id match.id
#1: manhattan williamsburg            2        3
#2: manhattan williamsburg            6        5
#3: manhattan williamsburg            2        1
#4: manhattan williamsburg            6        4

您可以在事后将其按摩成您喜欢的任何形式。

这里有另一种直接产生预期结果的方法,即每一行电影明星后面跟着随机挑选的两行非电影明星:

library(data.table)
setDT(df)[, {
  n_stars <- .SD[moviestar == 1, .N]
  rbind(.SD[moviestar == 1], .SD[moviestar == 0][sample.int(.N, 2L * n_stars)])[
    , pairid := rep(1:n_stars, 3L)][order(pairid)]
}, by = .(location, borough)]

我没有得到预期的输出,对于每个星,我想要两个非星,迭代后只给我4行,我无法得到匹配对id为2的星,有什么想法吗?谢谢:)我已经添加了上面的输出,因此您可以更明确地评论这不是您所要求的。正如你在上面看到的,对于每颗恒星,有2个匹配的非恒星。2是一颗恒星,我需要找到两对匹配的非恒星对(如记录1、3、5),对于id为6的恒星,找到2对。但就你而言,我没有看到任何非电影明星。请查看我问题中的输出。非常感谢!!我不明白你想要什么。上面的星号2与非星号1和3匹配;而星6与非星4和5匹配。你是说你想让每个明星对应4个人吗?在这种情况下,乘以4而不是2,然后做一个替换样本(因为在这个例子中你只有4个人可以选择)。我想我知道你在这里做了什么。太好了!我想我需要将它与原始数据合并,以便匹配的数据对复制我的结果。有没有一种方法可以让我得到自我匹配,也就是说,星号2也匹配星号2,从而得到我的结果?
library(data.table)
setDT(df)[, {
  n_stars <- .SD[moviestar == 1, .N]
  rbind(.SD[moviestar == 1], .SD[moviestar == 0][sample.int(.N, 2L * n_stars)])[
    , pairid := rep(1:n_stars, 3L)][order(pairid)]
}, by = .(location, borough)]
    location      borough moviestar id pairid
1: manhattan williamsburg         1  2      1
2: manhattan williamsburg         0  3      1
3: manhattan williamsburg         0  1      1
4: manhattan williamsburg         1  6      2
5: manhattan williamsburg         0  4      2
6: manhattan williamsburg         0  5      2