根据唯一值在两列上排序数据框

时间:2017-11-27 13:28:58

标签: r

我有一个R数据框,我想根据两个列(y - 升序和z - 降序)根据唯一的行名称(x)进行排序。

x   y   z
x1262   0.1222  0.5422
x1262   9.222   0.0233
x1262   1.2282  1.7453
x1263   0.1111  0.3739
x1263   0.3223  2.3288
x1264   0.9222  0.1122
x1265   0.3333  0.3367

我想要这个数据框:

x   y   z
x1262   9.222   0.0233
x1262   1.2282  1.7453
x1262   0.1222  0.5422
x1263   0.3223  2.3288
x1263   0.1111  0.3739
x1264   0.9222  0.1122
x1265   0.3333  0.3367

这是我未能完成工作的尝试:

df[order(df$y,-df$z, decreasing = TRUE) %in% unique(rank(df$x)), ]

有人可以帮忙吗? 感谢

2 个答案:

答案 0 :(得分:1)

您可以在order函数中添加列x以在x id中排序,然后使用-y对y进行排序。

dat[with(dat, order(x, -y, z)),]
      x      y      z
2 x1262 9.2220 0.0233
3 x1262 1.2282 1.7453
1 x1262 0.1222 0.5422
5 x1263 0.3223 2.3288
4 x1263 0.1111 0.3739
6 x1264 0.9222 0.1122
7 x1265 0.3333 0.3367

请注意,如果x列按某种特殊顺序排列并且您希望保留该顺序,那么除非您首先更改因子级别以编码所需顺序,否则此代码将无效。

答案 1 :(得分:-1)

这对你有用吗?

library(dplyr)
df <- df %>%
 arrange(x, desc(y))