我有一个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)), ]
有人可以帮忙吗? 感谢
答案 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))