排序一列,同时保持另一列固定(在另一列内)

时间:2012-10-25 05:59:23

标签: r

使用

df <- data.frame(x = rep(1:3, each = 3)
        , y = rep(1:3, 3)
        , z = round(rnorm(9), 2))

df
  x y     z
1 1 1  0.55
2 1 2  0.99
3 1 3 -2.32
4 2 1 -0.25
5 2 2  1.20
6 2 3 -0.38
7 3 1  1.07
8 3 2 -0.98
9 3 3 -1.09

有没有办法在每个z内对x进行排序,以便:

df.sort
  x y     z
1 1 3 -2.32
2 1 1  0.55
3 1 2  0.99
4 2 3 -0.38
5 2 1 -0.25
6 2 2  1.20
7 3 3 -1.09
8 3 2 -0.98
9 3 1  1.07

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以动态创建新的data.frame

data.frame(df$x, df[order(df$z), c("y", "z")])

答案 1 :(得分:1)

如果你想在x的每个值中按z排序(你的例子显示的是什么,而不是你的问题似乎导致了什么,你可以使用plyr并安排

library(plyr)
dfa <- arrange(df, x, z)

你在这里做的是首先按x排序,然后按z

排序