R 基于序列对行重新排序
有了下面的数据,我想在每个惟一的projectd中重新排列行R 基于序列对行重新排序,r,sequence,R,Sequence,有了下面的数据,我想在每个惟一的projectd中重新排列行 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)) 数据其他情况,即2、3、1或2、1、3或1、2、3如何etc@ak
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))
数据其他情况,即2、3、1或2、1、3或1、2、3如何etc@akrun我只对这两个案例感兴趣(1,3,2和1,4,2)。谢谢你的帮助。对你的代码有一个理论上的解释。如果对于每个项目ID,所讨论的序列不是该ProjectID中唯一的行,该怎么办。例如,如果Projectd126有4行,序列是1,1,4,2,而不是3行呢。资料
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