#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),
Затем я создал другую переменную, чтобы сохранить casualty_severity в качестве фактора
Age_of_Casualty = c(31,32,32,33,33,33,35,35))
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, что вы решили эту проблему — вы не совсем правильно отметили МОЙ ответ, но важно то, что вы получаете то, что вам нужно.