2017-03-16 1 views
0

다음 데이터를 사용하여 각 고유 ProjectID 내에서 행을 재정렬하고 싶습니다. 시퀀스가 포함 된 경우 중 하나 "1,3,2"또는 "-1,4,2-"나는 "4"3,1,2 "를 따르도록 행의 순서를 변경하거나 할 각각의 고유 한 ProjectID 내 시퀀스를 기반으로 행 재정렬

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)) 

, , 1,2 ".

ProjectID 126에는 Sequence 1,1,4,2에 대한 네 가지 관찰 결과가 있으므로 예상 결과에는 1,4,1,2가 표시되어야합니다.

어떻게하면됩니까? 다음과 같이

결과가 있어야한다

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

어떤 다른 경우 약 2, 3, 1, 2, 1, 3, 1, 2, 3 등 – akrun

+0

내가에만 관심이 @akrun 것, 즉 그 두 경우 (1,3,2 및 1,4,2)에서. – Dfeld

답변

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

도움에 감사드립니다. 당신의 코드에 이론적으로 도움이되었다. 각 프로젝트 ID에 대해 문제의 시퀀스가 ​​해당 ProjectID의 유일한 행이 아니라면 어떻게 될까요? 예를 들어, ProjectID 126에 3 행이 아닌 1, 4, 5, 4, 4, 4 개의 행이있는 경우 어떻게됩니까? 데이터 <- data.frame (ProjectID = c (123,123,123,124,125,125,126,126,126,126,128,129), 값 = c (1,4,7,3,8,9,2,5,5,7,2,6), 시퀀스 = c (1 , 3,2,1,3,2,1,1,4,2,2,4)) – Dfeld

관련 문제