我有一个rownames
的向量,因此它可以被视为一个带有2列的“矩阵”(一个用于文件名,一个用于Topic
):
> res
Topic
jardine-1.docx.md 1
jardine-2.docx.md 1
jardine-a1.docx.md 1
jardine-a2.docx.md 1
jardine-a3.docx.md 1
jardine-a4.docx.md 3
jardine-a5.docx.md 1
jardine-a6.docx.md 3
jardine-a7.docx.md 3
jardine-a8.docx.md 1
...
这些是关于主题建模的令人敬畏的R包的结果,恰当地称为topicmodels
。
我希望cast
将此“向量”转换为宽格式,仅用于演示目的。
这些课程打破了“整洁的数据”原则,其中“每个观察或案例都在自己的行中”(参见数据转换dplyr
,可用{{3}但是,宽格式比长格式更整洁:
Topic1 Topic2 Topic3
1 jardine-1.docx.md jk-1.docx.md jardine-a4.docx.md
2 jardine-2.docx.md jk-2.docx.md jardine-a6.docx.md
3 jardine-a1.docx.md jk-4.docx.md jardine-a7.docx.md
4 jardine-a2.docx.md jk-5.docx.md singtel-1.docx.md
5 jardine-a3.docx.md jk-6.docx.md singtel-2.docx.md
6 jardine-a5.docx.md <NA> singtel-3.docx.md
7 jardine-a8.docx.md <NA> singtel-4.docx.md
8 jk-3.docx.md <NA> singtel-5.docx.md
9 jk-7.docx.md <NA> <NA>
这当然可以通过多种方式完成 - 其中一种看起来像这样(警告:丑陋)
# via cbind
T1=rownames(subset(res, Topic==1))
T2=rownames(subset(res, Topic==2))
T3=rownames(subset(res, Topic==3))
n=max(length(T1),length(T2),length(T3))
length(T1) <- n
length(T2) <- n
length(T3) <- n
cbind(T1,T2,T3)
我的问题:
考虑到所有代码都在R Markdown文件中用于演示目的,还有其他更好的方式来呈现吗?
答案 0 :(得分:2)
我将使用DT包在markdown中创建一个交互式表。 Link to vignette
library(DT)
datatable(
dataframe, class = 'cell-border stripe', extensions = c('Buttons', 'FixedColumns'), options = list(
dom = 'Bfrtip', scrollX = TRUE, fixedColumns = TRUE,
buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
)
)
探索小插图,它有很多选项,例如:使用颜色和形状格式化字段,使用户能够交互地添加或删除列,在广泛的表格中sc,等等。
答案 1 :(得分:1)
如果您只是在寻找更多更清洁的代码,那么这可能会让您满意吗?
nmax <- max(table(res$Topic))
ntopics <- 3 # or ntopics <- max(res$Topic) to be more general
build_col <- function(i){rn <- rownames(subset(res,Topic==i)); rn <- c(rn,rep(NA,nmax-length(rn)))} # you may replace NA by "" here for it to look nicer
sapply(1:ntopics,build_col) %>% as.data.frame %>% setNames(paste0("Topic",1:ntopics))
# Topic1 Topic2 Topic3
# 1 jardine-1.docx.md <NA> jardine-a4.docx.md
# 2 jardine-2.docx.md <NA> jardine-a6.docx.md
# 3 jardine-a1.docx.md <NA> jardine-a7.docx.md
# 4 jardine-a2.docx.md <NA> <NA>
# 5 jardine-a3.docx.md <NA> <NA>
# 6 jardine-a5.docx.md <NA> <NA>
# 7 jardine-a8.docx.md <NA> <NA>