2017-08-23 1 views
-1
df1 <- data.frame(first_pair1_1=c(1,2,3,1,2,3,4),second_pair1_1=c(1,3,3,1,4,3,4),third_pair1_1=c(1,3,3,1,4,3,4),first_pair1_2=c(7,4,3,1,4,3,4),second_pair1_2=c(7,4,3,1,4,3,4),third_pair1_2=c(1,3,3,1,4,3,4),first_pair2_1=c(1,2,3,1,2,3,4),second_pair2_1=c(1,3,3,1,4,3,4),third_pair2_1=c(1,3,3,1,4,3,4),first_pair2_2=c(7,4,3,1,4,3,4),second_pair2_2=c(7,4,3,1,4,3,4),third_pair2_2=c(1,3,3,1,4,3,4)) 

ich über Datenrahmen haben und ich versuche folgende Berechnung zu tun:Erste Summe ähnlichen Paar und Multiplikation ergibt eine neue Spalte in gleichen Datenrahmen zu erhalten

(first_pair1_1 * second_pair1_1 * third_pair1_1) + 
(first_pair1_2 * second_pair1_2 * third_pair1_2) + 
(first_pair2_1 * second_pair2_1 * third_pair2_1) + 
(first_pair2_2 * second_pair2_2 * third_pair2_2) 

Ich mag zu bekommen führen eine neue Spalte in demselben Datenrahmen. Es könnte mehr Paare geben, aber Muster sind gleich.

Antwort

2

Hier ist eine Idee über die Basis R. Wir schleifen über das eindeutige Suffix von 1_1, 1_2, ... und multiplizieren alle Spalten, die jedes Suffix enthalten (d. H. 1_1 * 1_1 * 1_1 usw.). Wir verwenden dann rowSums sie hinzufügen, das heißt

ind <- unique(sub('.*pair', '', names(df1))) 
rowSums(sapply(ind, function(i) Reduce(`*`, df1[grepl(i, names(df1))]))) 
#[1] 100 132 108 4 192 108 256 
1
Reduce("+", lapply(split.default(df1, sub(pattern = "^[^_]*_", "", names(df1))), 
        function(a) Reduce("*", a))) 
#[1] 100 132 108 4 192 108 256 
Verwandte Themen