Таблица распределения с использованием ggplot 2 [duplicate]

eval echo \"\$$bar\" сделает это.

1
задан h3rm4n 1 January 2017 в 15:11
поделиться

1 ответ

Для полноты я добавляю базовое решение R к большому ответу @ bouncyball. Я буду использовать их синтетические данные, но я буду использовать cut для создания возрастных групп до агрегации.

# Creates data for plotting
> set.seed(123)
> dat <- data.frame(age = sample(20:50, 200, replace = TRUE),
                    awards = rpois(200, 3))

# Created a new column containing the age groups
> dat[["ageGroups"]] <- cut(dat[["age"]], c(-Inf, 20, 30, 40, Inf),
                            right = FALSE)

cut разделит набор числовых данных на основе разрывов, определенных во втором аргумент. right = FALSE переворачивает разрывы, поэтому значения будут включать более низкие значения, чем верхние (т.е. 20 <= x < 30, а не значение по умолчанию 20 < x <= 30). Группы не должны быть равномерно распределены. Если вы не хотите включать данные выше или ниже определенного значения, просто удалите Inf с конца или -Inf с начала соответственно, и функция вернет <NA>. Если вы хотите присвоить имена своих групп, вы можете сделать это с помощью аргумента labels.

Теперь мы можем aggregate на основе созданных нами групп.

> (summedGroups <- aggregate(awards ~ ageGroups, dat, FUN = sum))
  ageGroups awards
1   [20,30)    188
2   [30,40)    212
3 [40, Inf)    194

Наконец, мы можем построить эти данные с помощью функции barplot. Ключевым моментом здесь является использование names для возрастных групп.

> barplot(summedGroups[["awards"]], names = summedGroups[["ageGroups"]])

3
ответ дан Barker 16 August 2018 в 05:06
поделиться
  • 1
    @bouncyball спасибо, я сделал редактирование и решил использовать аргумент right = TRUE, потому что это похоже на то, что было похоже на то, что хотел пользователь, и я упомянул аргумент labels. – Barker 31 December 2016 в 17:46
  • 2
    Достаточно справедливо, спасибо, что продемонстрировали базовую реализацию R – bouncyball 31 December 2016 в 17:47
  • 3
    Хороший ответ, но вы можете изменить свою нижнюю группу на <= 30, так как в нижней части кода будет помещено что-либо меньше 30. – Barker 31 December 2016 в 17:51
Другие вопросы по тегам:

Похожие вопросы: