基于序列对行重新排序
问题描述:
使用以下数据我想重新排列每个唯一的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,3,2”或“1,4,2”我要重新排序的行遵循“3,1,2”或“4 ,1,2“。
在ProjectID 126中,有四个观察序列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))
答
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有4行,序列1,1,4,2而不是3行,那该怎么办?数据 Dfeld
什么其他情况下,即2,3,1或2个,1个,3个或1,2,3等 – akrun
@akrun我只感兴趣在这两种情况下(1,3,2和1,4,2)。 – Dfeld