Ранжирование вычисляемых переменных

#r #dplyr

#r #dplyr

Вопрос:

Я использую Cigarette набор данных из Ecdat пакета. Мне нужно найти средний годовой рейтинг количества проданных пакетов на душу населения в период с 1985 по 1995 год. А также самый низкий, при этом более высокий ранг определяется как имеющий большее количество пакетов на душу населения.

Я попытался выполнить фильтрацию по году и вычислить среднюю переменную пакетов, используя median (packpc), и упорядочить по этой измененной переменной, но продолжаю получать сообщения об ошибках.

Есть предложения?

Комментарии:

1. Что такое «средний годовой ранг»? Если у вас есть 100 наблюдений и вы оцениваете их по чему угодно, медиана равна 50.

Ответ №1:

То, что вы ищете, это summarize :

 library(Ecdat)
library(dplyr)
Cigarette %>% 
  filter(year>=1985, year<=1995) %>% 
  summarise(min=min(packpc), median=median(packpc), max=max(packpc))
#>       min   median     max
#> 1 49.2722 105.9096 197.994
  

Когда вы добавляете dplyr тег к этому вопросу, вы можете захотеть ознакомиться с руководствами по этому пакету.

PS: Если это ваша домашняя работа, вы должны четко указать это, чтобы мы не просто выдавали ответ.

Ответ №2:

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

Поскольку набор данных включает только годы с 1985 по 1995, нет необходимости в filter редактировании.

Итак, я придумал это довольно уродливое решение:

 ranks_perYear <- aggregate(packpc ~ year, Cigarette, rank)$packpc
colnames(ranks_perYear) <- levels(Cigarette$state)
medianRank <- apply(ranks_perYear, 2, median)
minRank <- apply(ranks_perYear, 2, min)
  

На самом деле я не совсем уверен, правильно ли здесь назначены состояния. Возможно, набор данных должен быть отсортирован по состоянию (например, dplyr::arrange(Cigarette, state) ) заранее.