Упорядочить фрейм данных в первую очередь по количеству появлений значения в столбце, а затем по второму столбцу. - PullRequest
0 голосов
/ 09 июля 2019

У меня есть датафрейм, ниже которого я хотел бы упорядочить в основном числовое значение по количеству раз, когда значение появляется в первом столбце (сначала большие значения), а затем - в алфавитном порядке (AZ) на основе второго столбца.

Name<-c("jack","jack","bob","david","mary")
Surname<-c("arf","dfg","hjk","dfgg","bn")
n1<-data.frame(Name, Surname)

Это должно быть что-то вроде:

n1<-n1[
  order( n1[,1], n1[,2] ),
  ]

, но я не знаю, как сделать числовой порядок на основе количества значений.

Ответы [ 3 ]

2 голосов
/ 09 июля 2019

Как подсказывает @thelatemail, вы можете сделать это в базе R, используя:

n1[order(-table(n1$Name)[n1$Name], n1$Surname), ]

Для сортировки по фамилии сначала поменяйте местами аргументы на order().

2 голосов
/ 09 июля 2019

Использование sqldf нравится следующее:

library(sqldf)

n2 <- sqldf('SELECT * FROM 
             n1 JOIN (SELECT Name, COUNT(*) as C FROM n1 GROUP BY Name) as T 
             on n1.Name = T.Name 
             ORDER BY C DESC, Surname')

Сначала сгруппированы имена, а затем отсортированы по количеству в приличном порядке и Surname в алфавитном порядке.

1 голос
/ 09 июля 2019

Используя dplyr, как показано ниже:

library(dplyr)
n1 %>%
  as_tibble() %>%
  count(Name) %>%
  right_join(n1, by = "Name") %>% # join the count back to your original frame
  arrange(desc(n), Surname) %>% # order by highest count first, then Surname
  select(-n) # just return the original frame, with the sorting you asked for
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...