2017-03-16 2 views
0

次のデータでは、それぞれ固有のProjectID内の行を再配置したいと思います。それぞれのユニークな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)) 

、シーケンスは、「3,1,2」または「4のいずれか含まれている「1,3,2」か「1,4,2」私は従って、行の順序を変更したい場合、1,2 "である。

ProjectID 126には、シーケンス1,1,4,2の4つの観測値があるため、予想される結果は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だろう。すなわちこれらの2つの症例(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,1,4,2の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

関連する問題