首页 > 解决方案 > 按R中的数字向量对数据框列进行排序

问题描述

我有一个带有一些变量的数据框,比如说

v1 v2 v3 v4 v5 v6

我有一个数字向量

ord <- c(0, 3, 4, 1, 5, 2)

我想按向量对数据框的列进行排序

var:  v1 v2 v3 v4 v5 v6
order: 0  3  4  1  5  2

预期结果:

v1 v4 v6 v2 v3 v5

有任何想法吗?非常感谢你

标签: r

解决方案


简单的例子。

df <- data.frame(v1=1,v2=1,v3=1,v4=1,v5=1,v6=1)
df
#   v1 v2 v3 v4 v5 v6
# 1  1  1  1  1  1  1

如果您以明确的状态提供我们可以使用和复制的数据,这将很有帮助。在未来的问题中,如果您可以为 提供类似此代码的df内容,它将有很大帮助。当框架已经由其他东西制成时,另一种方法是使用dput(df)并发布输出。(请注意不要用太多的数据淹没屏幕,您可能需要dput(head(df))替代或其他方法来减少数据量,同时保持它对您的问题具有代表性。)

structure(list(v1 = 1, v2 = 1, v3 = 1, v4 = 1, v5 = 1, v6 = 1), class = "data.frame", row.names = c(NA, 
-1L))

你的问题的答案

ord  <- c(0, 3, 4, 1, 5, 2)
df[ order(ord) ]
#   v1 v4 v6 v2 v3 v5
# 1  1  1  1  1  1  1

一些类似框架的工具(例如,data.table)确实更喜欢正确的列第二参数索引,所以这同样有效:

df[ ,order(ord) ]
#   v1 v4 v6 v2 v3 v5
# 1  1  1  1  1  1  1

library(data.table)
as.data.table(df)[ , order(ord), with=FALSE ]
#    v1 v4 v6 v2 v3 v5
# 1:  1  1  1  1  1  1

library(dplyr)
as.tbl(df)[ , order(ord) ]
# # A tibble: 1 x 6
#      v1    v4    v6    v2    v3    v5
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1     1     1     1     1     1     1

推荐阅读