我有一个带有一些变量的数据框,例如
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
有什么想法吗? 非常感谢
答案 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