基于R中的向量进行匹配

时间:2017-11-14 21:01:01

标签: r vector match

假设我们有一个数据框,其中包含属于某个组的个人,例如:在第一列中有ID,在第二列中有时间指示符,在第三列中是ID&#39 ;小组成员

Data <- data.frame(TICKER = rep(rep(c(1, 2, 3), each = 3), 2),
               TIME = c(rep(2012, 9), rep(2013, 9)),
               PEER = c(2, 500, 503,
                        1, 3, 504,
                        507, 508, 2,
                        2, 500, 503,
                        1, 3, 504,
                        507, 508, 509))

我想要实现的是,我得到第四列,其中包含指示个人是否在同一组中相互拥有的指标。也就是说,输出如下:

ID    TIME    PEER    INDICATOR
1     2012    2       1
1     2012    500     0
1     2012    503     0
2     2012    1       1
2     2012    3       1
2     2012    504     0
3     2012    507     0
3     2012    508     0
3     2012    2       1
1     2013    2       1
1     2013    500     0
1     2013    503     0
2     2013    1       1
2     2013    3       0 [since individual 3 does not have individual 2 anymore]
2     2013    504     0
3     2013    507     0
3     2013    508     0
3     2013    509     0

实现这一目标的最简单方法是什么?

谢谢:)

1 个答案:

答案 0 :(得分:1)

这是一个快速的双线技巧:

row_match <- apply(Data, 1, function(dr) paste0(sort(dr), collapse="_"))

Data$INDICATOR <- as.numeric(duplicated(row_match) | duplicated(row_match, fromLast = T))

> Data
   TICKER TIME PEER INDICATOR
1       1 2012    2         1
2       1 2012  500         0
3       1 2012  503         0
4       2 2012    1         1
5       2 2012    3         1
6       2 2012  504         0
7       3 2012  507         0
8       3 2012  508         0
9       3 2012    2         1
10      1 2013    2         1
11      1 2013  500         0
12      1 2013  503         0
13      2 2013    1         1
14      2 2013    3         0
15      2 2013  504         0
16      3 2013  507         0
17      3 2013  508         0
18      3 2013  509         0
相关问题