Если я правильно понимаю, это , а не тривиальный изменение формы от длинного к широкому вопрос с учетом требований OP:
- Порядок строк должен поддерживаться.
- Столбцы должны быть упорядочены в виде
W
. - Пропущенные записи должны отображаться пустыми, а не
NA
.
Для этого требуется
- для добавления номера строки для включения в формулу изменения формы,
- для превращения
W
в фактор, в котором уровни факторов упорядочены по внешнему виду с использованием forecats::fct_inorder()
, например, - для использования функции агрегирования, которая превращает
NA
в ""
с использованием toString()
, например, - , и для удаления номеров строк из измененного результата.
Здесь data.table
реализация dcast()
используется, так как data.table
выглядит немного более удобным, ИМХО.
library(data.table)
dcast(setDT(data_long)[, rn := .I], rn + id + T + X ~ forcats::fct_inorder(factor(W)),
toString, value.var = "fill")[
, rn := NULL][]
id T X 403 8395 4170 2768 3581 1 48 4790
1: 29730 111 100 1
2: 10766 92 100 1
3: 14291 98 100 1
4: 20506 110 200 1
5: 15603 112 100 1
6: 10504 87 200 6
7: 29730 89 100 9
8: 10766 80 200 1
Данные
library(data.table)
data_long <- fread(" fill W id X T
1 403 29730 100 111
1 8395 10766 100 92
1 4170 14291 100 98
1 2768 20506 200 110
1 3581 15603 100 112
6 1 10504 200 87
9 48 29730 100 89
1 4790 10766 200 80")