如何在R中对数据框进行排序

use*_*975 6 sorting r dataframe

我是R的新手,想要对称为"权重"的数据框进行排序.以下是详细信息:

>str(weights)
'data.frame':   57 obs. of  1 variable:
 $ attr_importance: num  0.04963 0.09069 0.09819 0.00712 0.12543 ...

> names(weights)
  [1] "attr_importance"

> dim(weights)
  [1] 57  1

> head(weights)
        attr_importance
make        0.049630556
address     0.090686474
all         0.098185517
num3d       0.007122618
our         0.125433292
over        0.075182467
Run Code Online (Sandbox Code Playgroud)

我想通过降低attr_importance的顺序排序,但我也希望保留相应的行名称.

我试过了:

> weights[order(-weights$attr_importance),]
Run Code Online (Sandbox Code Playgroud)

但它给了我一个"数字"背面.

我想要一个数据帧 - 按attr_importance排序,并且CORRESPONDING行名称保持不变.我怎样才能做到这一点?

提前致谢.

Ari*_*man 9

以下是data.frame排序的重要比较:

如何按列对数据框进行排序?

使用我现在首选的解决方案arrange:

dd <- data.frame(b = factor(c("Hi", "Med", "Hi", "Low"), 
      levels = c("Low", "Med", "Hi"), ordered = TRUE),
      x = c("A", "D", "A", "C"), y = c(8, 3, 9, 9),
      z = c(1, 1, 1, 2))
library(plyr)
arrange(dd,desc(z),b)
    b x y z
1 Low C 9 2
2 Med D 3 1
3  Hi A 8 1
4  Hi A 9 1
Run Code Online (Sandbox Code Playgroud)


Jos*_*ich 8

由于您的data.frame只有一列,因此您需要设置drop=FALSE以防止删除维度:

weights[order(-weights$attr_importance),,drop=FALSE]
#         attr_importance
# our         0.125433292
# all         0.098185517
# address     0.090686474
# over        0.075182467
# make        0.049630556
# num3d       0.007122618
Run Code Online (Sandbox Code Playgroud)