【发布时间】:2017-06-15 06:26:45
【问题描述】:
我有一个带有rownames 的向量,所以它可以被认为是一个包含两列的“矩阵”(一列用于文件名,一列用于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 的数据转换,here 可用。)不过,宽格式比长格式整洁得多:
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 文件中用于演示目的,还有其他更好的方式来呈现这一点吗?
【问题讨论】:
-
转换为data.frame,然后使用“标准”整形工具?
-
通常将不等长度的向量放入 data.frame 不是一个好主意。如果您真的必须这样做,请参阅this 了解一些选项。
-
通过更好的呈现方式?,你是什么意思?如何呈现数据?或者如何呈现数据的重塑?
-
res既不是向量也不是两列矩阵。使用str检查您实际拥有的内容。