У меня есть вектор с 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
, доступное здесь.) Тем не менее, широкий формат намного аккуратнее длинного:
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 для целей презентации?
res
не является ни вектором, ни матрицей с двумя столбцами. Используйтеstr
, чтобы проверить, что у вас есть на самом деле. - person Roland   schedule 15.06.2017