Как отсортировать фрейм данных в R - PullRequest
6 голосов
/ 01 августа 2011

Я новичок в 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

Я хочу отсортировать по убыванию порядка attr_importance, НО я хочу также сохранить соответствующие имена строк.

Я пытался:

> weights[order(-weights$attr_importance),]

но это возвращает мне "числовое" значение.

Я хочу вернуть фрейм данных, который отсортирован по attr_importance и содержит ИСПРАВЛЕННЫЕ имена строк. Как я могу это сделать?

Заранее спасибо.

Ответы [ 3 ]

9 голосов
/ 01 августа 2011

Вот большое сравнение сортировки 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
8 голосов
/ 01 августа 2011

Так как ваш 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
0 голосов
/ 24 сентября 2015

rankdata.txt

regno   name           total    maths   science social cat
1   SUKUMARAN   400 78  89  73  S
2   SHYAMALA    432 65  79  87  S
3   MANOJ       500 90  129 78  C
4   MILYPAULOSE 383 59  88  65  G
5   ANSAL       278 39  77  60  O
6   HAZEENA     273 45  55  56  O
7   MANJUSHA    374 50  99  52  C
8   BILBU       408 81  97  72  S
9   JOSEPHROBIN 374 57  85  68  G
10  SHINY       381 70  79  70  S
z <- data.frame(rankdata)

z[with(z, order(-total+ maths)),]  #order function  maths group selection
z
z[with(z, order(name)),]  # sort on name
z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...