tapply()
функция может организовать значения в объект матрицы с помощью функции c
. Значения получают инкапсулированные в списках:
with(z, tapply(Fruit, list(Person,Date), FUN=c))
20170101 20170102 20170103
Adam Character,2 "Bananna" NULL
Ben NULL Character,3 "Grape"
Вы можете отобразить эту матрицу объект с Pander:
library(pander)
panderOptions('keep.line.breaks', TRUE)
mytable <- with(z, tapply(Fruit, list(Person,Date), FUN=c))
pandoc.table(mytable, style="multiline")
----------------------------------------------------------
20170101 20170102 20170103
---------- ----------- ------------------------ ----------
**Adam** Apple, Pear Bananna NULL
**Ben** NULL Blueberry, Cherry, Grape Grape
----------------------------------------------------------
Если вы хотите, чтобы линии, разделяющие «клетку» вы можете использовать стиль = «сетку». Выходной сигнал затем выглядит следующим образом:
+----------+-------------+--------------------------+------------+
| Person | 20170101 | 20170102 | 20170103 |
+==========+=============+==========================+============+
| Adam | Apple, Pear | Bananna | |
+----------+-------------+--------------------------+------------+
| Ben | | Blueberry, Cherry, Grape | Grape |
+----------+-------------+--------------------------+------------+
Если вы используете paste0 обрушением вы можете удалить запятые и использовать символы новой строки вместо:
mytable <- with(z, tapply(Fruit, list(Person,Date), FUN=paste0, collapse="\n"))
Структура матрицы теперь отличается, причем каждая запись будучи символьное значение длины-1, но что же тогда получить отображаются в таблице pandoc с каждым фруктам на одной строке:
pandoc.table(mytable, style="multiline") # or style ="grid" as above
#------------
-------------------------------------------
20170101 20170102 20170103
---------- ---------- ---------- ----------
**Adam** Apple Bananna NA
Pear
**Ben** NA Blueberry Grape
Cherry
Grape
-------------------------------------------
как правило, вы оба должны показать выход и описать то, что правила перевода с вх ut для вывода. Я удаляю тег data.table, так как вы должны использовать его только для вопросов о пакете, а не просто для того, чтобы привлечь внимание людей, которые следуют за тегом или запросить ответ с этим пакетом, даже не установив его самостоятельно ... – Frank
логика выглядит нормально, но мы должны предупредить об 1) наличии пустых пространств, созданных в кадрах данных, и 2) укладке нескольких элементов в одно векторное положение. Это возможно, но вы будете работать против зерна –
Попробуйте это сейчас 'reshape2 :: dcast (z, Person ~ Date, value.var =" Fruit ", fun = toString)' –