Как отсортировать кадр данных по нескольким столбцам, каждый столбец в другом направлении? - PullRequest
0 голосов
/ 28 февраля 2019

Я хотел бы заказать в порядке ASC в одном столбце и в порядке DESC во втором столбце.Предположим, у меня есть эти данные:

names <- c("a", "a", "b", "b", "b")
values <- c(4,1,1,2,4)
smallData <- data.frame(name = names, value = values)
smallData
  name value
2    a     1
3    b     1
4    b     2
1    a     4
5    b     4

Я знаю, что могу заказать smallData как:

smallData[order(smallData$name),]
smallData[order(smallData$name, decreasing = T),]
smallData[order(smallData$name, smallData$value),]

Но как я могу заказать по имени ASC, а затем по значению DESC?Вывод должен выглядеть следующим образом:

  name value
1    a     4
2    a     1
5    b     4
4    b     2
3    b     1

ПРИМЕЧАНИЕ: предпочел бы реализацию base R, но любопытно посмотреть, как это можно сделать

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Мы можем установить значения value в отрицательное значение, чтобы изменить порядок:

smallData[order(smallData$name, -smallData$value),]

или rank, что также будет работать с символьными переменными:

smallData[order(smallData$name, -rank(smallData$value)),]

Выход:

  name value
1    a     4
2    a     1
5    b     4
4    b     2
3    b     1
0 голосов
/ 28 февраля 2019

Не уверен, что это то, что вы имеете в виду, но вы можете использовать order следующим образом:

names <- c("paul", "mark", "dave", "will", "john")
values <- c(1,4,1,2,1)
smallData <- data.frame(name = names, value = values)

index <- order(smallData$name)
smallData <- smallData[index,]

index <- order(smallData$value)
smallData <- smallData[index,]

Какие выходы:

> smallData
  name value
3 dave     1
5 john     1
1 paul     1
4 will     2
2 mark     4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...