R:将 "tidyr/tidyverse" 语句转换为 "dplyr" 和 "reshape2"

R: Converting "tidyr/tidyverse" statements to "dplyr" and "reshape2"

我正在使用 R 编程语言。在之前的 post () 中,我学习了如何为数据集中的所有分类变量制作自动直方图:

#create data

var_1 <- rnorm(1000,10,10)
var_2 <- rnorm(1000, 5, 5)
var_3 <- rnorm(1000, 6,18)

favorite_food <- c("pizza","ice cream", "sushi", "carrots", "onions", "broccoli", "spinach", "artichoke", "lima beans", "asparagus", "eggplant", "lettuce", "cucumbers")
favorite_food <-  sample(favorite_food, 1000, replace=TRUE, prob=c(0.5, 0.45, 0.04, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001))


response <- c("a","b")
response <- sample(response, 1000, replace=TRUE, prob=c(0.3, 0.7))


data = data.frame( var_1, var_2, var_3, favorite_food, response)

data$favorite_food = as.factor(data$favorite_food)
data$response = as.factor(data$response)

#specify categorical variables
factor_vars <- sapply(data, is.factor)

varnames <- names(data)

deselect_not_factors <- varnames[!factor_vars]

#load libraries 
library(tidyr)
library(ggplot2)

#format data
data_long <- data %>%
  pivot_longer(
    cols = -deselect_not_factors,
    names_to = "category",
    values_to = "value"
  )

#create plots
ggplot(data_long) +
  geom_bar(
    aes(x = value)
  ) +
  facet_wrap(~category, scales = "free")

我的问题:是否可以使用“dplyr”和“reshape2”库中的函数(例如“melt()”)替换“pivot_longer”语句?

谢谢

reshape2::melt一起指定id.vars中的id列,即deselect_not_factorsnames_tovalues_to对应的参数是variable.namevalue.name

library(dplyr)
library(ggplot2)
data %>% 
   reshape2::melt(id.vars = deselect_not_factors, 
        variable.name = 'category', value.name = 'value') %>%
   ggplot() +
    geom_bar(
     aes(x = value)
       ) +
    facet_wrap(~category, scales = "free")