2017-06-14 55 views
1

我有一对数据框,其中有一对个人评分自己(1,0)并对他们的合作伙伴评分(1,0)。匹配配对数据的行之间的数据

have <- data.frame(group=c(1, 1, 2, 2, 3, 3), 
        person=c(1, 2, 1, 2, 1, 2), 
        rateSelf=c(1, 0, 1, 0, 1, 0), 
        rateOther=c(1, 1, 1, 0, 0, 0)) 
have 

# group person rateSelf rateOther 
#1  1  1  1   1 
#2  1  2  0   1 
#3  2  1  1   1 
#4  2  2  0   0 
#5  3  1  1   0 
#6  3  2  0   0 

我想比较人如何评价自己(rateSelf)他们是如何被其他人(ratedByOther)评级。

want <- data.frame(group=c(1, 1, 2, 2, 3, 3), 
        person=c(1, 2, 1, 2, 1, 2), 
        rateSelf=c(1, 0, 1, 0, 1, 0), 
        rateOther=c(1, 1, 1, 0, 0, 0), 
        ratedByOther=c(1, 1, 0, 1, 0, 0)) 
want 

# group person rateSelf rateOther ratedByOther 
#1  1  1  1   1   1 
#2  1  2  0   1   1 
#3  2  1  1   1   0 
#4  2  2  0   0   1 
#5  3  1  1   0   0 
#6  3  2  0   0   0 

什么是一个聪明的方式来获得ratedByOther

+1

目前尚不清楚有关获取的逻辑'ratedByOther' – akrun

+0

比方说,我' (2)中的人1,你在'group'中是'2人'。我评价自己('have [3,3] == 1')并评价你('have [3,4] == 1')。我想比较我如何评价自己(1)和评价我的方式('have [4,4] == 0')。我需要在我的排名中得到你的评价。 –

+0

'have $ rateByOther < - with(have,ave(rateOther,group,FUN = rev))' – alistaire

回答

1

认为这你想要做什么:

library(dplyr) 
want <- have %>% 
    group_by(group) %>% 
    mutate(ratedByOther = rev(rateOther)) 

    group person rateSelf rateOther ratedByOther 
    <dbl> <dbl> <dbl>  <dbl>  <dbl> 
1  1  1  1   1   1 
2  1  2  0   1   1 
3  2  1  1   1   0 
4  2  2  0   0   1 
5  3  1  1   0   0 
6  3  2  0   0   0 
+0

'rev()'来拯救。太好了! –

0

我们可以使用data.table

library(data.table) 
setDT(have)[, ratedByOther := rev(rateOther), group]