сортировать фрейм данных вручную, используя не числовой столбец - PullRequest
6 голосов
/ 22 февраля 2012

у меня есть следующий фрейм данных

    dd <- data.frame(b = c("High", "Medium", "Highest", "Low", "Not bad","Good", "V. Good"),
   x = c("C3", "C1", "C4", "N2", "C2", "N1","N4"), x = c("5", "2", "3", "6", "7", "5","7") )

поэтому я хочу преобразовать фрейм данных, используя ручной порядок для переменной X.

например: это оригинал

1    High C3   5
2  Medium C1   2
3 Highest C4   3
4     Low N2   6
5 Not bad C2   7
6    Good N1   5
7 V. Good N4   7

но я хочу, чтобы начался новый фрейм данных, основанный на значении X, но не в алфавитном порядке, а случайным образом в порядке, который я выбрал, например:

the first row has x=C1, the second have x=C2, the third have x=N4, ...etc

как это можно сделать ??

спасибо

Ответы [ 2 ]

10 голосов
/ 22 февраля 2012

Поскольку столбец x является фактором, вы можете просто убедиться, что его уровни в нужном вам порядке.

# New sorting order
desired_order <- sample(levels(dd$x))
# Re-order the levels
dd$x <- factor( as.character(dd$x), levels=desired_order )
# Re-order the data.frame
dd <- dd[order(dd$x),]
0 голосов
/ 22 февраля 2012

Если ваш data.frame действительно достаточно мал, чтобы вручную переупорядочить, то просто сделайте вектор чисел 1:7, упорядоченный так, как должны выглядеть строки. e.g.:

    dd[c(2,5,7,1,4,3,6),]

    b  x x.1
    2  Medium C1   2
    5 Not bad C2   7
    7 V. Good N4   7
    1    High C3   5
    4     Low N2   6
    3 Highest C4   3
    6    Good N1   5

Или, если вы действительно хотите сделать это с символьным вектором, вы также можете ссылаться на имена строк, например:

    rownames(dd) <- as.character(dd$x)
    dd[c("C1","C2","N4","C3","N2","C4","N1"),]

    b  x x.1
    C1  Medium C1   2
    C2 Not bad C2   7
    N4 V. Good N4   7
    C3    High C3   5
    N2     Low N2   6
    C4 Highest C4   3
    N1    Good N1   5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...