2017-06-14 1 views
1

Ich habe einen Datenrahmen mit Paaren von Personen, die sich selbst bewertet (1,0) und bewertet ihren Partner (1,0).Match Daten über Reihen für paarweise Bewertungen

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 

Ich möchte vergleichen, wie jemand sich bewertet (rateSelf), wie sie von der anderen Person bewertet wurden (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 

Was ist eine intelligente Art und Weise ratedByOther zu bekommen?

+1

verwenden Sie über die Logik nicht klar ist, die von immer 'ratedByOther' – akrun

+0

Lassen Sie sagen, ich bin' Person '1 in' Gruppe' 2, und du bist 'Person' 2 in' Gruppe' 2. Ich bewerte mich selbst ('habe [3,3] == 1') und bewerte dich (' habe [3,4] == 1'). Ich möchte vergleichen, wie ich mich selbst bewertet habe (1) und wie du mich bewertet hast ('have [4,4] == 0'). Ich muss deine Bewertung von mir in meiner Reihe bekommen. –

+0

'haben $ rateByOther <- mit (haben, ave (rateOther, Gruppe, FUN = rev))' – alistaire

Antwort

1

ich denke, das tut, was Sie wollen:

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()' zur Rettung. nett! –

0

Wir data.table

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