R:根据向量的顺序对数据框进行排序?

标签 r dataframe

这是我的示例数据框

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/

相关文章:

r - 按组汇总数据框

重新排序枢轴宽表

python - 使用生成器表达式将列表系列转换为数据帧

python - 使用编辑距离替换另一列中的单词

javascript - 在 Cloud Foundry 上运行 Shiny 应用程序的 R 构建包和 Assets 的 JavaScript 构建包

r - 如何纠正切割方法的错误结果?

python - Pandas - 匹配两个数据框中的两列并在 df1 中创建新列

python - 从系列/字典中的匹配列更新 Pandas 数据框行值

python - 根据列值将数据从一个 Pandas 数据框复制到另一个

r - cv.glm 变量长度不同