I have a dataframe text with count n of word appearing in each file file_num = 1 or 2 or 3. I would like to use ggplot to generate three subplots, one for each value of file_num, with word on the y-axis and the frequency n on x-axis. I want each sub-plot to be sorted according to increasing or decreasing value of n observed withing each file_num. I have tried many different ways to solve this seemingly trivial issue but have not been successful.
Here is dput of my test data:
structure(list(file_num = c("1", "1", "1", "1", "2", "2", "2",
"2", "2", "3", "3", "3", "3", "3"), word = c("test", "quality",
"page", "limit", "information", "limit", "test", "instruments",
"quality", "limit", "test", "effective", "page", "system"), n = c(5,
35, 55, 75, 20, 30, 40, 60, 70, 101, 201, 301, 401, 501)), class = c("spec_tbl_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -14L), spec = structure(list(
cols = list(file_num = structure(list(), class = c("collector_character",
"collector")), word = structure(list(), class = c("collector_character",
"collector")), n = structure(list(), class = c("collector_double",
"collector"))), default = structure(list(), class = c("collector_guess",
"collector")), skip = 1), class = "col_spec"))
Here is what I have tried:
library(tidytext)
library(stringr)
library(pdftools)
library(dplyr)
library(purrr)
library(ggplot2)
library(forcats)
text %>% group_by(file_num) %>% arrange(file_num, desc(n)) %>%
ggplot(.,aes(factor(word,levels = unique(word)), n, fill = file_num)) +
geom_bar(stat = "identity", position = "dodge") +
scale_x_discrete("Word") +
scale_y_continuous("n") + coord_flip() +
facet_grid(rows = vars(file_num), scales = "free")
Here is the plot that is generated using the above code on dataframe text created using the dput data. It shows the desired result (word sorted with increasing value of n) for file_num = 1, but not for file_num = 2 or 3:



