Как я могу отсортировать два столбца в моем наборе данных, я хочу отсортировать по расстоянию между столбцами и GoingTo? - PullRequest
1 голос
/ 04 апреля 2020

это мой набор данных, но я преобразовал его во фрейм данных

travel <- data.frame(
          date=c("1/6/2012","1/6/2012",
               "1/4/2012","1/4/2012",
               "1/3/2012","1/3/2012","1/2/2012")
          ,GoingTo=c("Home","GSK","Home",
                     "GSK","Home","GSK","Home")
          ,Distance=c("51.29","51.63","51.27",
                      "49.17","51.15","51.80","51.37"))

, а затем я пытаюсь написать этот код для сортировки двух столбцов, но у меня есть эта ошибка.

Data_Sort <- travel[sort(travel$Distance,travel$GoingTo , decreasing = TRUE),]

Ошибка

Error in is.na(na.last) || na.last : invalid 'y' type in 'x || y'

1 Ответ

1 голос
/ 04 апреля 2020

В R нам нужно order вместо sort, так как sort возвращает отсортированное значение, а не индекс, тогда как order возвращает индекс, который можно использовать в качестве индекса строки

travel[order(travel$Distance,travel$GoingTo , decreasing = TRUE),]
#     date GoingTo Distance
#6 1/3/2012     GSK    51.80
#2 1/6/2012     GSK    51.63
#7 1/2/2012    Home    51.37
#1 1/6/2012    Home    51.29
#3 1/4/2012    Home    51.27
#5 1/3/2012    Home    51.15
#4 1/4/2012     GSK    49.17

Или в dplyr

library(dplyr)
travel %>%
      arrange(desc(Distance), desc(GoingTo))
#    date GoingTo Distance
#1 1/3/2012     GSK    51.80
#2 1/6/2012     GSK    51.63
#3 1/2/2012    Home    51.37
#4 1/6/2012    Home    51.29
#5 1/4/2012    Home    51.27
#6 1/3/2012    Home    51.15
#7 1/4/2012     GSK    49.17

При sort.int есть возможность вернуть index.return = TRUE, а затем извлечь элемент ix, но это здесь не применимо, поскольку столбцы не относятся к классу integer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...