无法从 tbl df object 访问要在 ggplot2 上使用的数据
Cannot access data from tbl df object to be used on ggplot2
我正在研究一组 LDA 模型,以比较它们对主题分配的预测准确性。下面是一些简短的描述。
我应用了每个文档每个主题分配,为每个文档提取最高 "gamma"(总共 15 个)的主题,然后我使用 Chang 和 Blei (2009) rtm
方法得到每个文档的主题预测 word/token 和 select 给定文档中最常见的主题作为该文档的预测主题。最后,我将两个预测与 topic
合并为第一种方法的 header consensus
作为第二种方法,与文档 ID
匹配并保留原始文档文本。数据(命名为assignments
)可以评估here(330 x 6,不是很大)。
我尝试用 ggplot2
可视化方法的预测准确性,使用每个 document/per 主题方法作为沿 y-axis 和 rtm
绘制的基线使用以下代码
在 x-axis 上评估的方法
library(foreign)
library(topicmodels)
library(tm)
library(tidyr)
library(plyr)
library(ggplot2)
library(lda)
library(igraph)
library(scales)
load("~/assignments.Rdata")
assignments %>%
count(topic, consensus, wt_var = freq) %>%
group_by(topic) %>%
mutate(percent = n / sum(n)) %>%
ggplot(aes(consensus, topic, fill = percent)) +
geom_tile() +
scale_fill_gradient2(high = "red", label = percent_format()) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
panel.grid = element_blank()) +
labs(x = "RTM assignments",
y = "Documents came from",
fill = "% of assignments")
但是,我在 count(topic, consensus,...)
行收到一条错误消息,显示 Error in count(., topic, consensus, wt_var = freq) : unused argument (consensus)
,但是,如果我从代码行中删除 consensus
,我会得到 Error in count(., topic, wt_var = freq) : object 'topic' not found
.
我怀疑这可能是 S4 class 问题(也可能不是),所以我尝试了以下方法。在 group_by()
变量上使用 ""
,但没有用。相反,我收到此错误消息 Error in sum(n) : invalid 'type' (closure) of argument
.
然后我使用 tbl_df(assignments)
将 assignments
转换为兼容 tibble 的 object。同样,它没有用,R 仍然无法从 tibble object.
中找到 consensus
和 topic
数据
我真的很困惑,希望有人看一下我的代码并给我一些启发。
谢谢。
我认为您在函数前半部分的数据操作方面存在问题。我首先按主题和共识对作业进行分组,这样计数就会区分它们(而不是仅仅返回频率总和),然后应用计数(用引号引起来的变量)最后 mutate:
library(dplyr)
assignments_2 <- assignments %>% group_by(topic, consensus) %>%
count(vars = "topic", wt_var = "freq") %>%
mutate(percent = n / sum(n))
如果这将数据放入我认为您想要的格式,那么您应该能够绘制图表!
我正在研究一组 LDA 模型,以比较它们对主题分配的预测准确性。下面是一些简短的描述。
我应用了每个文档每个主题分配,为每个文档提取最高 "gamma"(总共 15 个)的主题,然后我使用 Chang 和 Blei (2009) rtm
方法得到每个文档的主题预测 word/token 和 select 给定文档中最常见的主题作为该文档的预测主题。最后,我将两个预测与 topic
合并为第一种方法的 header consensus
作为第二种方法,与文档 ID
匹配并保留原始文档文本。数据(命名为assignments
)可以评估here(330 x 6,不是很大)。
我尝试用 ggplot2
可视化方法的预测准确性,使用每个 document/per 主题方法作为沿 y-axis 和 rtm
绘制的基线使用以下代码
library(foreign)
library(topicmodels)
library(tm)
library(tidyr)
library(plyr)
library(ggplot2)
library(lda)
library(igraph)
library(scales)
load("~/assignments.Rdata")
assignments %>%
count(topic, consensus, wt_var = freq) %>%
group_by(topic) %>%
mutate(percent = n / sum(n)) %>%
ggplot(aes(consensus, topic, fill = percent)) +
geom_tile() +
scale_fill_gradient2(high = "red", label = percent_format()) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
panel.grid = element_blank()) +
labs(x = "RTM assignments",
y = "Documents came from",
fill = "% of assignments")
但是,我在 count(topic, consensus,...)
行收到一条错误消息,显示 Error in count(., topic, consensus, wt_var = freq) : unused argument (consensus)
,但是,如果我从代码行中删除 consensus
,我会得到 Error in count(., topic, wt_var = freq) : object 'topic' not found
.
我怀疑这可能是 S4 class 问题(也可能不是),所以我尝试了以下方法。在 group_by()
变量上使用 ""
,但没有用。相反,我收到此错误消息 Error in sum(n) : invalid 'type' (closure) of argument
.
然后我使用 tbl_df(assignments)
将 assignments
转换为兼容 tibble 的 object。同样,它没有用,R 仍然无法从 tibble object.
consensus
和 topic
数据
我真的很困惑,希望有人看一下我的代码并给我一些启发。
谢谢。
我认为您在函数前半部分的数据操作方面存在问题。我首先按主题和共识对作业进行分组,这样计数就会区分它们(而不是仅仅返回频率总和),然后应用计数(用引号引起来的变量)最后 mutate:
library(dplyr)
assignments_2 <- assignments %>% group_by(topic, consensus) %>%
count(vars = "topic", wt_var = "freq") %>%
mutate(percent = n / sum(n))
如果这将数据放入我认为您想要的格式,那么您应该能够绘制图表!