这是我的示例数据框
df <- data.frame(id=rep(c(123,456),each=5),col1=c(3,6,4,3,8,9,2,1,3,4),col2=c(7,8,5,4,6,8,7,5,8,3))
id col1 col2
1 123 3 7
2 123 6 8
3 123 4 5
4 123 3 4
5 123 8 6
6 456 9 8
7 456 2 7
8 456 1 5
9 456 3 8
10 456 4 3
desiredOrder <- rep(c(456,123),each=5)
我想根据特定向量 (desiredOrder) 中指定的顺序进行排序,以便输出如下所示:
id col1 col2
1 456 9 8
2 456 2 7
3 456 1 5
4 456 3 8
5 456 4 3
6 123 3 7
7 123 6 8
8 123 4 5
9 123 3 4
10 123 8 6
(因此 id=456 的行向上移动到 id=123 的行上方,但保留了行的原始顺序)
我试过:
df[match(df$id,desiredOrder),]
然而,结果与我所追求的相去甚远:
id col1 col2
6 456 9 8
6.1 456 9 8
6.2 456 9 8
6.3 456 9 8
6.4 456 9 8
1 123 3 7
1.1 123 3 7
1.2 123 3 7
1.3 123 3 7
1.4 123 3 7
最佳答案
我们可以将“id”列转换为 factor
,并将 levels
指定为 vector
中的 unique
元素> 然后执行 order
df[order(factor(df$id, levels=unique(desiredOrder))),]
# id col1 col2
#6 456 9 8
#7 456 2 7
#8 456 1 5
#9 456 3 8
#10 456 4 3
#1 123 3 7
#2 123 6 8
#3 123 4 5
#4 123 3 4
#5 123 8 6
关于R:根据向量的顺序对数据框进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36562840/