Напоминание R о том, что целое число является фактором при создании Boxplot

#r #ggplot2

#r #ggplot2

Вопрос:

Добрый день,

Это мой 1-й вопрос здесь, и все попытки предпринимаются, чтобы быть тщательными.

Я работаю с большим набором данных (casualtiesdf) в R, и я пытаюсь создать Boxplot, используя ggplot2, с переменной Age_of несчастного случая переменной Casualty_Severity . Проблема в том, что R считает, что переменная Casualty_Severity является целым числом. Casualty_Severity в данных указан номерами 1, 2,3.

Ниже вы можете видеть, что я попытался переименовать целое число в именованный фактор, которому соответствует, а затем преобразовал целое число в фактор.

 casualtiesdf$Casualty_Severity[casualtiesdf$Casualty_Severity == 1] "Fatal" 
casualtiesdf$Casualty_Severity[casualtiesdf$Casualty_Severity == 2]"Serious"
casualtiesdf$Casualty_Severity[casualtiesdf$Casualty_Severity == 3] "Slight"
casualtiesdf$Casualty_Severity <- as.factor(casualtiesdf$Casualty_Severity)
  

Однако, когда я пытаюсь выполнить Boxplot…

 > ggplot(data = casualtiesdf, aes(x = Age_of_Casualty,
  y = casualtiesdf$Casualty_Severity))  
  geom_boxplot()
  

Я получаю: «Предупреждающее сообщение: position_dodge требует неперекрывающихся интервалов x»
Я ввел это сообщение в Google, и stackflow, похоже, советует поместить категориальную переменную в оси x (да, я все еще очень смущен своими x и y …), Поэтому я попытался:

 ggplot(data = casualtiesdf, aes(x = Casualtiesdf$Casualty_Severity, 
                            y = Age_of_Casualty   
                            geom_boxplot()
  

и получить сообщение об ошибке «Ошибка: объект ‘Age_of_Casualty’ не найден»

Затем я подумал, что, возможно, мне нужно поместить as.factor в код графика:

 ggplot(data = casualtiesdf, aes(x = casualtiesdf$Casualty_Severity  
as.factor(casualtiesdf$Casualty_Severity))) y = Age_of_Casualty)  
geom_boxplot()
  

и получите сообщение об ошибке «неожиданный символ в: geom_boxplot() ggplot»

Любая помощь в этом очень ценится!

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

1. Добро пожаловать в сообщество R. Вот несколько советов: задавая вопросы, вероятно, самое важное — предоставить воспроизводимые данные для ссылки. Отсутствие данных обычно делает следующий код довольно бесполезным.

2. И еще одна вещь, которую следует иметь в виду: что-то вроде df <- data.frame(a = sample(1:3, 20, replace = T), b = runif(20, 1, 10)) идеально отражает вашу проблему. Фактический набор данных или размер, если на то пошло, на самом деле ничего не значат в контексте реальной проблемы.

Ответ №1:

Является ли Age_of_Casualty также частью фрейма данных? если нет, вы можете рассмотреть возможность объединения или отдельного присваивания для создания столбца Age_of_Casualty также в df.

Я создал фиктивный фрейм данных с двумя переменными

casualtiesdf <- data.frame(Casualty_Severity=c(1,2,1,1,2,3,1,3),
Age_of_Casualty = c(31,32,32,33,33,33,35,35))
Затем я создал другую переменную, чтобы сохранить casualty_severity в качестве фактора

 casualtiesdf$Casualty_Severity_factor <- factor(x = casualtiesdf$Casualty_Severity, 
                                            levels = c(1,2,3),
                                            labels = c("Fatal","Serious","Slight"))
  

После этого я могу создать прямоугольную диаграмму с casualty_severity в качестве оси X

 library("ggplot2")
ggplot(data = casualtiesdf, 
       aes(x= Casualty_Severity_factor, y =  Age_of_Casualty))  
  geom_boxplot()
  

Это должно дать вам такой графиквведите описание изображения здесь

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

1. Привет, также отмечен как правильный ответ, поскольку все, что мне было нужно, это casualtiesdf$Casualty_Severity_factor <- factor(x = casualtiesdf $Casualty_Severity . Я думаю, что если бы я разместил «воспроизводимые данные», как было предложено выше, это помогло бы. Большое спасибо

Ответ №2:

Поэтому я ожидаю, что в вашем третьем примере R сообщает, что у вас синтаксическая ошибка: unexpected symbol in: geom_boxplot() означает «Я понятия не имею, что делать с этим ...))) y = бизнесом.

В вашем первом примере R ошибочно присваивается Age_of_Casualty как X — это действительно переменная, распределение которой вы хотите проанализировать (это должна быть Y переменная).

Итак, вы правы, вам нужно установить Casualty_Severity в качестве фактора и убедиться, что две переменные правильно приписаны X и Y. Что-то вроде этого:

 # Creating dummy data 
AC.rand <- sample(15:90, 500, replace = T)
CS.rand <- sample(1:3, 500, replace = T)

# Combine them into a dataframe, define the "Severity" variable as a Factor
casualtiesdf <- data.frame(Casualty_Severity = factor(CS.rand), Age_of_Casualty = AC.rand)

# Define the Levels for the "Severity" variable - not necessary
levels(casualtiesdf$Casualty_Severity)=c("Fatal", "Serious", "Slight")

g <- ggplot(data = casualtiesdf, aes(x = Casualty_Severity, y = Age_of_Casualty))
g <- g   geom_boxplot()
  

Когда я смоделировал 500 строк данных, я получаю что-то вроде:
введите описание изображения здесь

Я тоже новичок в SO, так что давайте учиться вместе! 🙂

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

1. Спасибо всем! Мне, наконец, удалось выяснить, что все, что мне нужно было сделать, это напомнить R, что Casualty_Severity является фактором, указав потери

2. Толстые пальцы и понятия не имею, как отредактировать этот последний комментарий. Я понял, что все, что мне нужно было сделать, это casualtiesdf$Casualty_Severity <-as.factor(casualtiesdf$Casualty_Severity)

3. Спасибо @NicoleR! Был бы признателен, если бы вы отметили это как «ответ», чтобы я мог повысить свой SO credit. 🙂 Рад, что вы на правильном пути

4. Готово! Мне потребовалось немного времени, чтобы разобраться, как пометить как правильное. Спасибо за вашу помощь.

5. Я рад, @NicoleR, что вы решили эту проблему — вы не совсем правильно отметили МОЙ ответ, но важно то, что вы получаете то, что вам нужно.