Если вы не можете редактировать эту часть кода, где был определен ваш dict, вы все равно можете заказать его в любой момент, как хотите:
from collections import OrderedDict
order_of_keys = ["key1", "key2", "key3", "key4", "key5"]
list_of_tuples = [(key, your_dict[key]) for key in order_of_keys]
your_dict = OrderedDict(list_of_tuples)
Ну, у меня здесь нет проблем:
df <- data.frame(v=1:5, x=sample(LETTERS[1:5],5))
df
# v x
# 1 1 D
# 2 2 A
# 3 3 B
# 4 4 C
# 5 5 E
df <- df[order(df$x),]
df
# v x
# 2 2 A
# 3 3 B
# 4 4 C
# 1 1 D
# 5 5 E
Используйте функцию order
:
set.seed(1)
DF <- data.frame(ID= sample(letters[1:26], 15, TRUE),
num = sample(1:100, 15, TRUE),
random = rnorm(15),
stringsAsFactors=FALSE)
DF[order(DF[,'ID']), ]
ID num random
10 b 27 0.61982575
12 e 2 -0.15579551
5 f 78 0.59390132
11 f 39 -0.05612874
1 g 50 -0.04493361
2 j 72 -0.01619026
14 j 87 -0.47815006
3 o 100 0.94383621
9 q 13 -1.98935170
8 r 66 0.07456498
13 r 39 -1.47075238
15 u 35 0.41794156
4 x 39 0.82122120
6 x 94 0.91897737
7 y 22 0.78213630
Другое решение будет использовать функцию orderBy
из пакета doBy:
> library(doBy)
> orderBy(~ID, DF)
#sort dataframe by col
sort.df <- with(df, df[order(sortbythiscolumn) , ])
#can also sort by more than one variable: sort by col1 and then by col2
sort2.df <- with(df, df[order(col1, col2) , ])
#sort in reverse order
sort2.df <- with(df, df[order(col1, -col2) , ])
col1
должен быть df$col1
здесь. Я был бы рад, если бы вы могли отредактировать эту часть. И вы, вероятно, могли бы добавить приятное использование with
здесь!
– Arun
11 February 2013 в 19:48
df[with(df, order(col1, col2)),]
, но оба они выглядят одинаково.
– Arun
11 February 2013 в 19:54
Это действительно связано с ответом @ Ramnath, но я не могу комментировать, поскольку у меня пока нет достаточной репутации. Вы также можете использовать функцию arrange
из пакета dplyr
так же, как пакет plyr
.
library(dplyr)
arrange(DF, ID, desc(num))
Функция arrange
в пакете plyr
упрощает сортировку по нескольким столбцам. Например, сначала сортировка DF
на ID
, а затем уменьшение на num
, вы можете написать
plyr::arrange(DF, ID, desc(num))
Функция order () не работает, когда столбец имеет уровни или коэффициент. Он работает правильно, когда stringsAsFactors = FALSE используется в создании data.frame.