按R中的数值向量对Dataframe列进行排序

时间:2019-02-01 21:42:47

标签: 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

有什么想法吗? 非常感谢

1 个答案:

答案 0 :(得分:0)

简单的例子。

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