R 具有重复因子的ggplot组的打印顺序

R 具有重复因子的ggplot组的打印顺序,r,ggplot2,tidyverse,R,Ggplot2,Tidyverse,我正在进行一些文本分析,并尝试使用反向文档频率(数值)按每本书显示最上面的单词。我主要关注TidyText采矿,但使用的是哈利波特 某些书籍之间的顶部单词(使用IDF)是相同的(例如,卢平或Griphook),打印时,订单使用该单词的最大IDF。例如,在《魔法石》和《死亡圣器》中,griphook都是一个关键词。它在死亡圣器中的值为.0007,但仅为.0002,但被定为魔法石的最高值 hp.plot% 排列(描述(tf_idf))%>% 变异(单词=因子(单词,级别=修订(唯一(单词))) #

我正在进行一些文本分析,并尝试使用反向文档频率(数值)按每本书显示最上面的单词。我主要关注TidyText采矿,但使用的是哈利波特

某些书籍之间的顶部单词(使用IDF)是相同的(例如,卢平或Griphook),打印时,订单使用该单词的最大IDF。例如,在《魔法石》和《死亡圣器》中,griphook都是一个关键词。它在死亡圣器中的值为.0007,但仅为.0002,但被定为魔法石的最高值

hp.plot%
排列(描述(tf_idf))%>%
变异(单词=因子(单词,级别=修订(唯一(单词)))
##正确订购书籍
hp.plot$book函数
reorder()
将按指定变量对系数重新排序(请参见
?reorder

在打印前的最后一个块中,在
ungroup()
之后插入
mutate(word=reorder(word,tf_idf))
应按
tf_idf
重新排序。我没有您的数据样本,但使用
janeaustenr
软件包,它也会执行相同的操作:

library(tidytext)
library(janeaustenr)
library(dplyr)

book_words <- austen_books() %>%
  unnest_tokens(word, text) %>%
  count(book, word, sort = TRUE) %>%
  ungroup()

total_words <- book_words %>% 
  group_by(book) %>% 
  summarize(total = sum(n))

book_words <- left_join(book_words, total_words)

book_words <- book_words %>%
  bind_tf_idf(word, book, n) 


library(ggplot2)
book_words %>% 
  group_by(book) %>%
  top_n(10) %>% 
  ungroup() %>% 
  mutate(word = reorder(word, tf_idf)) %>% 
  ggplot(aes(x = word, y = tf_idf, fill = book, group = book)) + 
  geom_col(show.legend = FALSE) +
  labs(x = NULL, y = "tf-idf") +
  facet_wrap(~book, scales = "free") +
  coord_flip()
库(tidytext)
图书馆(珍妮奥斯汀)
图书馆(dplyr)
书刊字数%
unnest_标记(单词、文本)%%>%
计数(书本、单词、排序=真)%>%
解组()
总字数%
按(书本)分组%>%
汇总(总计=总和(n))
书刊字数%
按(书本)分组%>%
排名靠前的(10)%>%
解组()%>%
变异(单词=重新排序(单词,tf_idf))%>%
ggplot(aes(x=word,y=tf_-idf,fill=book,group=book))+
几何坐标(show.legend=FALSE)+
实验室(x=NULL,y=“tf idf”)+
小平面包装(~book,scales=“free”)+
coord_flip()

如果您想手动更改因子级别的顺序,可以尝试:

word = factor(word, levels = word[c(grep("griphook", word)[1], grep("quirrell", word)[1], ...)]);
如果因子水平应由tf_idf订购,您可以使用以下内容:

level_ordered =rep(0, l)
for (i in 0: (l-1))
{
    level_ordered = c(level_ordered, grep(as.character((sort(tf_idf, partial=l-i)[l-i])), tf_idf)[1])
}
word = factor(word, levels=word[level_ordered])

我问了一个以前已经回答过的问题,但我不熟悉ggplot的术语。下面的SO线程对此进行了回答


谢谢您看一看。这个大问题是简·奥斯汀的书中没有共同的词语。您的解决方案似乎在单词出现的第一个位置强制它,但在下一次单词出现在列表中时,它会出现在错误的位置。我已经附加了一个csv的数据来尝试它。啊,我现在看到了问题。我不知道如何为每个方面确定不同的因子顺序,但是如果你将数据框按书分割,你可以使用这个答案为每本书绘制单独的图。谢谢@jdb,知道要搜索的实际措辞会让我找到一个可行的答案!
level_ordered =rep(0, l)
for (i in 0: (l-1))
{
    level_ordered = c(level_ordered, grep(as.character((sort(tf_idf, partial=l-i)[l-i])), tf_idf)[1])
}
word = factor(word, levels=word[level_ordered])