2017-03-16 7 views
0

Mit den folgenden Daten möchte ich Zeilen innerhalb jeder eindeutigen ProjectID neu anordnen.Reihenfolge der Zeilen basierend auf Sequenz

Data <- data.frame(ProjectID=c(123,123,123,124,125,125,126,126,126,126,128,129), 
       Value=c(1,4,7,3,8,9,2,5,3,7,2,6), 
       Sequence=c(1,3,2,1,3,2,1,1,4,2,2,4)) 

Innerhalb jeder einzigartigen ProjectID, wenn die Sequenz enthält entweder „1,3,2“ oder „1,4,2“ Ich habe die Zeilen neu anordnen möchten „3,1,2“ oder „4 folgen , 1,2 ", jeweils.

In ProjectID 126 gibt es vier Beobachtungen mit der Sequenz 1,1,4,2, also sollte das erwartete Ergebnis 1,4,1,2 zeigen.

Wie kann ich das erreichen?

Ergebnis soll wie folgt

Result <- data.frame(ProjectID=c(123,123,123,124,125,125,126,126,126,126,128,129), 
       Value=c(4,1,7,3,8,9,2,3,5,7,2,6), 
       Sequence=c(3,1,2,1,3,2,1,4,1,2,2,4)) 
+0

Was ist mit anderen Fällen, also 2, 3, 1 oder 2, 1, 3 oder 1, 2, 3 usw. – akrun

+0

@akrun würde ich nur daran interessiert sein in diesen beiden Fällen (1,3,2 und 1,4,2). – Dfeld

Antwort

1
do.call(rbind, 
    lapply(split(Data, Data$ProjectID), function(a){ 
     if(identical(a$Sequence, c(1,4,2))){ 
      a[match(a$Sequence, c(4,1,2)),] 
     }else if(identical(a$Sequence, c(1,3,2))){ 
      a[match(a$Sequence, c(3,1,2)),] 
     }else{ 
      a 
     } 
    } 
) 
) 
#  ProjectID Value Sequence 
#123.2  123  4  3 
#123.1  123  1  1 
#123.3  123  7  2 
#124   124  3  1 
#125.5  125  8  3 
#125.6  125  9  2 
#126.8  126  5  4 
#126.7  126  2  1 
#126.9  126  7  2 
#128   128  2  2 
#129   129  6  4 
+0

Danke für die Hilfe. Hatte eine theoretische für Ihren Code. Was wäre, wenn für jede Projekt-ID die fragliche Sequenz nicht die einzigen Zeilen in dieser Projekt-ID wären? Was wäre zum Beispiel, wenn ProjectID 126 4 Zeilen mit der Sequenz 1,1,4,2 statt 3 Zeilen hätte. Daten <- data.frame (ProjektID = c (123,123,123,124,125,125,126,126,126,126,128,129), Wert = c (1,4,7,3,8,9,2,5,5,7,2,6), Sequenz = c (1 , 3,2,1,3,2,1,1,4,2,2,4)) – Dfeld

Verwandte Themen