Как отсортировать распределение частоты столбца данных - PullRequest
0 голосов
/ 07 мая 2018

Ближайший вопрос к моему: Преобразование столбца фрейма данных в распределение частот в R

Другие вопросы в основном о заговоре; не то, что мне нужно

В этом посте задан еще один вопрос, чем указанный; а именно, как только столбец, о котором идет речь, представляется как распределение частот с использованием «таблицы», как можно отсортировать это распределение частот?

Простой пример: определить фрейм данных:

a <- c(13, 14, 15, 16, 15, 15, 22, 21, 44, 21)
b <- c(16, 17, 17, 18, 18, 22, 17, 16, 16, 17)
test <- data.frame(a, b)

> test
    a  b
1  13 16
2  14 17
3  15 17
4  16 18
5  15 18
6  15 22
7  22 17
8  21 16
9  44 16
10 21 17

Найти распределение частот второго столбца данных кадра "test"

fd.test <- data.frame(table(test$b))

> fd.test
  Var1 Freq
1   16    3
2   17    4
3   18    2
4   22    1

Теперь попытайтесь отсортировать по столбцу «Freq»:

fd.test.sort <- fd.test[order(fd.test$Freq)]  

Вышеприведенное возвращает «выбранные неопределенные столбцы»

Что особенно сбивает с толку, так это то, что при вводе текста в качестве названия столбца предлагается «Freq», который я затем выбираю.

Я также попробовал следующее:

fd.test.sort <- fd.test[order(fd.test [, 2])] 

Но это возвращает то же сообщение об ошибке

Используя пример, я ищу:

> fd.test.sort
  Var1 Freq
1   17    4
2   16    3
3   18    2
4   22    1

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Функция order в базе R возвращает упорядоченные значения индекса вектора, для которого она была вызвана, что в этом случае выглядит следующим образом:

order(fd.test$Freq)
# [1] 4 3 1 2

Эти значения могут затем использоваться для «индексации» вектора в отсортированном векторе:

fd.test$Var1[order(fd.test$Freq)]
# [1] 22 18 16 17

При использовании order для сортировки объекта с несколькими измерениями, однако, необходимо указать, какое измерение должно быть отсортировано. Если, как и в этом случае, цель состоит в сортировке строк data.frame (и возвращении всех его столбцов), то необходимо использовать запятую в конце. Далее, для сортировки в порядке убывания используйте знак минуса (-), чтобы сторнировать вывод из order:

# equivalent to fd.test[c(2, 1, 3, 4),]
fd.test[order(-fd.test$Freq),]

#   Var1 Freq
# 2   17    4
# 1   16    3
# 3   18    2
# 4   22    1
0 голосов
/ 07 мая 2018

Альтернативный способ сделать это с помощью dplyr:

test %>% 
    count(b) %>%
    arrange(desc(n))

desc() используется для сортировки в порядке убывания. Выход:

# A tibble: 4 x 2
      b     n
  <dbl> <int>
1    17     4
2    16     3
3    18     2
4    22     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...