Как я могу создать несколько пар boxplot в R?

#r #boxplot

#r #boxplot

Вопрос:

У меня есть набор данных с почти 4000 наблюдениями, которые содержат 9 разных групп. Итак, у меня есть следующие переменные

Группа: 1,2,3, …., 9

Пол: мужской, женский

Вес: вес каждого отдельного

Что я хочу сделать, так это создать пары boxplot (мужские, женские) для каждой группы. Таким образом, в этом случае у меня будет 18 boxplots.

Как я могу это сделать, не создавая по одному подмножеству данных для каждой функции boxplot ( subset() или which() ).

Кроме того, у меня небольшая проблема с этими данными, есть некоторые наблюдения без веса, ячейки пустые или с . точкой.

Вот фиктивный образец с 3 группами, где пол = 1 средняя женщина и 2 мужчины.

 Group     Sex   Weight
1         1     140
1         2
1         2     160
1         1     154
1         1     127
2         2     182
2         2     192
2         1     .
2         1     147
2         1     129
3         1     124
3         2     182
3         1     .
3         2     141
3         1     148
  

Я никогда не использовал эту dput() функцию, я не знаю, правильно ли это

 dput(data)
structure(list(Group = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L), Sex = c(1L, 2L, 2L, 1L, 1L, 2L, 2L, 
1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L), Weight = structure(c(6L, 1L, 
11L, 10L, 4L, 12L, 13L, 2L, 8L, 5L, 3L, 12L, 2L, 7L, 9L), .Label = c("", 
".", "124", "127", "129", "140", "141", "147", "148", "154", 
"160", "182", "192"), class = "factor")), .Names = c("Group", 
"Sex", "Weight"), class = "data.frame", row.names = c(NA, -15L
))
  

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

1. Пожалуйста, укажите образец набора данных

2. @HubertL Я добавил вымышленный образец в качестве примера.

3. Пожалуйста, используйте dput or read.table , чтобы мы могли легко загружать ваши данные

Ответ №1:

При правильном присвоении класса (числового, факторного) столбцам данных вы могли бы сделать:

 library(ggplot2)

DF = structure(list(Group = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L), Sex = c(1L, 2L, 2L, 1L, 1L, 2L, 2L, 
1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L), Weight = structure(c(6L, 1L, 
11L, 10L, 4L, 12L, 13L, 2L, 8L, 5L, 3L, 12L, 2L, 7L, 9L), .Label = c("", 
".", "124", "127", "129", "140", "141", "147", "148", "154", 
"160", "182", "192"), class = "factor")), .Names = c("Group", 
"Sex", "Weight"), class = "data.frame", row.names = c(NA, -15L
))

str(DF)
#'data.frame':  15 obs. of  3 variables:
# $ Group : int  1 1 1 1 1 2 2 2 2 2 ...
# $ Sex   : int  1 2 2 1 1 2 2 1 1 1 ...
# $ Weight: Factor w/ 13 levels "",".","124","127",..: 6 1 11 10 4 12 13 2 8 5 ...

#The Weight column is currently of class factor that needs to converted to 
#class numeric by first converting to character class and replacing "." by ""


DF$Weight = as.numeric(gsub("[.]","",as.character(DF$Weight)))

#Sex variable should be converted to factor, 
#If 1 is considered as FeMale and 2 as Male

DF$Sex = ifelse(DF$Sex==1,"FeMale","Male")

DF$Sex <- as.factor(DF$Sex)

gg <- ggplot(DF, aes(x=Sex, y=Weight))   
  geom_boxplot()   facet_wrap(~Group)   ggtitle("Weight vs Sex for various Groups")  
  theme(plot.title = element_text(size=14, face="bold"))
gg
  

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

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

1. Есть способ обменять числа 1 и 2 на метки Female и Male под каждой парой boxplots?

2. Обновлено с женскими и мужскими метками