2017-07-03 4 views
1

Ich habe folgenden dyadic-Datensatz:Sum gleiche Werte unter einer Bedingung in einer Dyade Datenstruktur

ID.x  Attribute1.x  Attribute2.x ID.y  Attribute1.y Attribute2.y rowsum 
2323  11    11   9923  22   11  1 
3423  11    22   3422  11   44  1 
5343  22    22   5555  11   0  0 
54336  0     44   0234  11   44   1 
4334  11    22   2345  44   11   1 
34563  22    0   9429  0    22   2 
34534  44    0   2345  44   11  1 

Ich mag überprüfen, ob die Attribute von jeder Spalte der Schauspieler x sind die gleiche wie von y

Attribute1.x == Attribute1.y 
Attribute2.x == Attribute2.y 
... 

und summieren sie in eine Spalte "rowsum". Mein vollständiger Datenrahmen besteht aus 100 Spalten mit Attributen für jeden Akteur (x, y).

Ich habe bereits versucht und sind gescheitert irgendwie:

dyadic_df$rowsome <- apply(dat_wp_dyadic_1, 1, function(x) length(which(x==11 & x==22 & x==0 & x==44))) 

Antwort

2

den Index der Spalten Erhalten Länge von intersect zu erhalten, wenn dieselbe in gelten:

# get index 
x_index <- grep("^A.*x$", colnames(df1)) 
y_index <- grep("^A.*y$", colnames(df1)) 

# loop by row, sort and compare 
df1$myRowSum <- 
    apply(df1, 1, function(i){ 
    length(intersect(i[x_index], i[y_index])) 
    }) 

df1 
# ID.x Attribute1.x Attribute2.x ID.y Attribute1.y Attribute2.y rowsum myRowSum 
# 1 2323   11   11 9923   22   11  1  1 
# 2 3423   11   22 3422   11   44  1  1 
# 3 5343   22   22 5555   11   0  0  0 
# 4 54336   0   44 234   11   44  1  1 
# 5 4334   11   22 2345   44   11  1  1 
# 6 34563   22   0 9429   0   22  2  2 
# 7 34534   44   0 2345   44   11  1  1 

Edit:

OP: Entsprechend Ihrem Vorschlag habe ich sum ((i [x_index] == i [y_index])) anstatt Schnittpunkt verwendet, um zusammenzufassen, wie viele Werte pro Spalte genau gleich sind. Jetzt möchte ich summieren, wenn eine Bedingung erfüllt ist Summe (i [x_index] & i [x_index] == 11 | 22)

mySet <- c(11, 22) 

# loop by row, sort and compare 
df1$myRowSumFilter <- 
    apply(df1, 1, function(i){ 
    length(intersect(i[x_index][ i[x_index] %in% mySet ], 
        i[y_index][ i[y_index] %in% mySet ])) 
    }) 

df1 
+0

Thank you very much! Eine weitere Frage: Nach deinem Vorschlag habe ich sum ((i [x_index] == i [y_index])) anstatt sich zu schneiden verwendet, um zusammenzufassen, wie viele Werte pro Spalte genau gleich sind. Nun möchte ich zusammenfassen, ob eine Bedingung erfüllt ist sum (i [x_index] & i [x_index] == 11 | 22) ... aber ich bekomme einen Fehler ?! – PeteWoods

+0

@PeteWoods könnten Sie nur '11, 22's im Vektor halten, dann überprüfen. Ich werde mit einem Beispiel aktualisieren. – zx8754

+1

@PeteWoods Beitrag aktualisiert mit einem Beispiel, in Zukunft vermeiden neue Fragen in den Kommentaren zu stellen. – zx8754

Verwandte Themen