Использование apply и ggplot для создания нескольких гистограмм в R

#r #ggplot2 #dplyr #apply

Вопрос:

У меня есть данные опроса (1300 строк и 12 столбцов), и я хотел бы сделать гистограммы для всех столбцов (я удалил все значения NA).

 q1 <- rep(c("yes", "no"), 10)
q2 <- rep(c("no", "yes"), 10)
q3 <- 20:39
data <- cbind.data.frame(q1,q2,q3)```
 

Я использую следующий код, но, похоже, не могу получить правильную метку для оси x (которая должна быть просто именем столбца).

 lapply(data[,c(1:3)], function(variable) ggplot(data = data,
                                     mapping = aes(variable))   
         geom_bar()   labs(x = variable, y = "count"))
 

Ответ №1:

Одним из вариантов достижения желаемого результата было бы перебирать имена переменных и использовать .data местоимение из rlang так:

 q1 <- rep(c("yes", "no"), 10)
q2 <- rep(c("no", "yes"), 10)
q3 <- 20:39
data <- data.frame(q1, q2, q3)

library(ggplot2)

lapply(names(data), function(variable) {
  ggplot(
    data = data,
    mapping = aes(.data[[variable]])
  )  
    geom_bar()  
    labs(x = variable, y = "count")
})
#> [[1]]
 

 #> 
#> [[2]]
 

 #> 
#> [[3]]
 

Ответ №2:

В base R , используйте barplot с table

 par(mfrow = c(3, 1))
Map((x, y) barplot(table(x), xlab = y), data, names(data))
 

-выход

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