У меня есть фрейм данных text
с числом n
из word
, появляющимся в каждом файле file_num = 1 or 2 or 3
. Я хотел бы использовать ggplot для генерации трех вспомогательных участков, по одному для каждого значения file_num
, с word
по оси Y и частотой n
по оси X. Я хочу, чтобы каждый подзаголовок сортировался в соответствии с увеличением или уменьшением значения n
, наблюдаемого при каждом file_num
. Я пробовал много разных способов решить эту, казалось бы, тривиальную проблему, но безуспешно.
Вот dput
моих тестовых данных:
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"))
Вот что я пробовал:
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")
Вот график, который генерируется с использованием код выше на фрейме данных text
, созданный с использованием данных dput
. Он показывает желаемый результат (word
, отсортированный с увеличением значения n
) для file_num = 1, но не для file_num = 2 или 3: