按特定顺序排序data.frame(不上升/下降)

van*_*eri 0 sorting r dataframe

a = data.frame(x = c("fl", "kl", "po", "rt", "st"), a = runif(5), b = runif(5), c = runif(5), stringsAsFactors=FALSE)

reference = c("po", "rt", "fl", "st", "kl")
Run Code Online (Sandbox Code Playgroud)

有data.frame a,它应该x根据reference向量排序.我该怎么做?

Rol*_*and 8

用途match:

match(reference, a$x)
#[1] 3 4 1 5 2

a[match(reference, a$x),]
#   x          a          b         c
#3 po 0.11479400 0.85043472 0.1972569
#4 rt 0.04886256 0.04916686 0.8341600
#1 fl 0.57528688 0.31122035 0.1204271
#5 st 0.77224495 0.29492122 0.9136916
#2 kl 0.67683487 0.87516455 0.9612954
Run Code Online (Sandbox Code Playgroud)

解决data.frame中重复值问题的解决方案(尽管一个示例应该代表问题):

a = data.frame(x = c("fl", "kl", "po", "rt", "st", "st"), a = runif(6), 
               b = runif(6), c = runif(6), stringsAsFactors=FALSE)

a[order(factor(a$x, levels = reference)),]
#   x          a            b         c
#3 po 0.43392816 0.0008970879 0.7282965
#4 rt 0.74484047 0.4237432110 0.3593475
#1 fl 0.69747570 0.0441067580 0.1477714
#5 st 0.18866673 0.3650689835 0.4940101
#6 st 0.93842498 0.4953243888 0.4318899
#2 kl 0.09158319 0.6171634013 0.8798650
Run Code Online (Sandbox Code Playgroud)