Barchart% курения и% несчастных случаев в 50 штатах США - PullRequest
0 голосов
/ 17 июня 2020

newb ie в R: хотел спросить, как я могу построить две числовые переменные (скажем,% курения и% потребления спиртных напитков) по 50 штатам США - я легко могу сделать это в Excel, но все еще испытываю затруднения в R; любые идеи? введите описание изображения здесь

#Let's say here is my code:
smoking <- c(21, 23.4, 83)
drinking <- c(19.5, 28.9, 57)
States <- c(CA, NH, NJ)

Как я могу построить штриховую диаграмму для курения (красный) и питья (черный) с состояниями на оси x. Извините, Stacko не позволяет мне загрузить pi c или файл данных. Еще раз спасибо!

введите описание изображения здесь

1 Ответ

0 голосов
/ 24 июня 2020

Данные, которые вы предоставили, когда они помещены в таблицу, не являются «аккуратными». Вы можете узнать больше о аккуратных данных здесь .

Вот что я сделал, чтобы получить желаемый результат, предполагая, что вы начинаете с таких данных, как df:

smoking <- c(21, 23.4, 83)
drinking <- c(19.5, 28.9, 57)
States <- c("CA", "NH", "NJ")

# the 'messy' data
df <- data.frame("States" = States,
                 "Smoking" = smoking,
                 "Drinking" = drinking)
> df
  States Smoking Drinking
1     CA    21.0     19.5
2     NH    23.4     28.9
3     NJ    83.0     57.0

Когда затем можно использовать пакет tidyr, чтобы преобразовать его в длинный формат. С этим намного проще работать в ggplot2.

library(tidyr)
df_tidy <- pivot_longer(df, -States, names_to = "Type")
> df_tidy
# A tibble: 6 x 3
  States Type     value
  <chr>  <chr>    <dbl>
1 CA     Smoking   21  
2 CA     Drinking  19.5
3 NH     Smoking   23.4
4 NH     Drinking  28.9
5 NJ     Smoking   83  
6 NJ     Drinking  57 

Наконец, мы можем построить это, используя ggplot2:

library(ggplot2)
ggplot(df_tidy, aes(x = States, y = value)) +
        geom_bar(aes(fill = Type), position = "dodge", stat = "identity")

Мы также можем просто использовать geom_col() вместо geom_bar(), который использует stat = "identity" по умолчанию, как мы узнаем из этой tidyverse страницы справки.

ggplot(df_tidy, aes(x = States, y = value)) +
        geom_col(aes(fill = Type), position = "dodge")

В любом случае мы получаем:

введите описание изображения здесь

...