使用R中的外部因子排序对数据帧进行排序

使用R中的外部因子排序对数据帧进行排序,r,dataframe,sorting,R,Dataframe,Sorting,一个琐碎的问题。简单的例子。假设我有以下几点: df <- data.frame(x = as.factor(1:10), y = rnorm(10, 0, 1)) x_order = c("3", "1", "5", "7", "8", "9", "2", "6", "10", "4") df我们可以将“x_顺序”转换为整数并用作行索引 df1 <- df[as.integer(x_order),] 或者将“x”列转换为因子,并将级别指定为“

一个琐碎的问题。简单的例子。假设我有以下几点:

df <- data.frame(x = as.factor(1:10),
                 y = rnorm(10, 0, 1))

x_order = c("3", "1", "5", "7", "8", "9", "2", "6", "10", "4")

df我们可以将“x_顺序”转换为
整数
并用作行索引

df1 <- df[as.integer(x_order),]
或者将“x”列转换为
因子
,并将
级别
指定为“x顺序
和do顺序”`

df[order(factor(df$x, levels = x_order)),]

这里是另一个基本R解决方案,您可以使用
df
rownames
df
的行重新排序,即

dfout <- df[match(x_order,rownames(df)),]

如果x是分类的(如10个名字、10个星号等),这仍然有效吗?@Alan如果是
x\u order@Alan也许
match
会是你要找的,我看到你上面的一般案例评论。非常感谢。我将看看是否可以将该方法应用于更复杂的实际数据。@akrun好的,是的,我从示例中给出的特例中假设了它
dfout <- df[match(x_order,rownames(df)),]
> dfout
    x           y
3   3  0.08897425
1   1  0.96173905
5   5  0.81658185
7   7  0.19946419
8   8 -0.21296035
9   9  0.16236732
2   2 -0.32710972
6   6  0.11647613
10 10  0.26953532
4   4  1.17435024