Как создать ggplot, когда ответы являются ЛОЖНЫМИ или ИСТИННЫМИ?

#r #ggplot2 #r-haven

#r #ggplot2 #r-haven

Вопрос:

Как я могу создать график с помощью ggplot, если мои ответы ИСТИННЫ или ЛОЖНЫ?

Это мой код:

 t.obese<-master1%>%
  filter(Income>0,obese==TRUE)%>%
  select(Income,obese)

> head(t.obese)
  Income obese
1  21600    TRUE
2   4000    TRUE
3  12720    TRUE
4  26772    TRUE
 

когда я пытаюсь создать график, r говорит мне: » Не знаю, как автоматически выбрать масштаб для объекта типа haven_labelled/vctrs_vctr/double . По умолчанию используется значение «непрерывный».
Фелер: stat_count() может иметь только эстетику x или y «.

Спасибо!

 > dput(t.obese[1:10, ])
structure(list(Income = structure(c(1944, 4000, 16000, 19200, 
22800, 21600, 18000, 18000, 2000, 18000), label = "Wages,Salary from                    main job", format.stata = "B.0g", labels = c(`[-5] in Fragebogenversion    nicht enthalten` = -5, 
 `[-2] trifft nicht zu` = -2), class = c("haven_labelled",      "vctrs_vctr", 
 "double")), obese = c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 
TRUE, TRUE, TRUE)), row.names = c(NA, 10L), class = "data.frame")
 

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

1. показать свой код графика?

2. Что вы хотите поместить на ось x? Что вы хотите поместить на ось y? Какой тип графика (линейка, линия, точка …)? Вы хотите использовать цвет или что-нибудь еще?

3. Поскольку я очень новичок, с которым я пробовал, p<-ggplot(t.obese, aes(x=obese, y=Income) geom_bar() я хотел бы иметь Boxplots, y = Доход и x = ожирение

4. Но если это линия, точка или гистограмма, подойдет любая.. моя главная проблема — это проблема с ИСТИННЫМ и ЛОЖНЫМ

5. @GregorThomas я отредактировал его!

Ответ №1:

Если вы хотите сравнить распределение доходов по ожирению, то вам нужны как obese = TRUE, так и obese = FALSE, чтобы вы могли провести сравнение

Я случайно создал non_obese набор данных только для сравнения. Кроме того, я удалил haven_labelled класс для Income , поскольку он вызывал некоторые проблемы при reprex рендеринге [с использованием haven::zap_labels()

В любом случае, надеюсь, что следующее поможет вам начать

 library(dplyr)
library(ggplot2)
library(haven)

obese <- 
structure(list(Income = structure(c(1944, 4000, 16000, 19200, 
                                    22800, 21600, 18000, 18000, 2000, 18000), 
                                  label = "Wages,Salary from main job", 
                                  format.stata = "B.0g", 
                                  labels = c(`[-5] in Fragebogenversion nicht enthalten` = -5,
                                             `[-2] trifft nicht zu` = -2), 
                                  class = c("haven_labelled", "vctrs_vctr","double")), 
               obese = c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,TRUE, TRUE, TRUE)), 
          row.names = c(NA, 10L), class = "data.frame"
          )


# remove the haven/labelled class of the income variable
obese <- 
  obese %>% 
  haven::zap_labels() 

non_obese <- 
  obese %>% 
  mutate(
    Income = Income - rnorm(1, mean = 1000, sd = 50),
    obese  = !obese
  )



full_data <- 
  bind_rows(obese, non_obese)


# Box plot 
full_data %>% 
  ggplot(
    aes(obese, Income)
  ) 
  geom_boxplot(width = 0.5) 
  geom_point(position = position_jitter(width  = 0.05))
 

 # Density plot
full_data %>% 
  ggplot(
    aes(Income,fill = obese)
  ) 
  geom_density(alpha = 0.5)
 

Создано 2020-12-03 пакетом reprex (версия 0.3.0)

Ответ №2:

С данными, которыми вы поделились, которые минимальны, попробовал это:

 library(ggplot2)
#Code1
ggplot(as.data.frame(t.obese), aes(x=factor(obese), y=Income))  
  geom_bar(stat='identity') 
  xlab('Obese') 
  scale_y_continuous(labels = scales::comma)
 

Вывод:

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

И это:

 #Code 2
ggplot(as.data.frame(t.obese), aes(x=factor(obese), y=Income))  
  geom_point() 
  geom_jitter() 
  geom_boxplot() 
  xlab('Obese')
 

Вывод:

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