通过以下数据,我想重新排列每个唯一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))
在每个唯一的ProjectID中,如果序列包含&#34; 1,3,2&#34;或&#34; 1,4,2&#34;我想重新排序行以遵循&#34; 3,1,2&#34;或者&#34; 4,1,2和#34;分别。
在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))
答案 0 :(得分: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