У меня есть кадр данных, который выглядит следующим образом:
+--------+---------------+----+
| period | label | n |
+--------+---------------+----+
| 4 | Engaged | 2 |
| 4 | Remarkable | 1 |
| 5 | Engaged | 1 |
| 5 | Inconsistent | 2 |
| 5 | Remarkable | 5 |
| 6 | Engaged | 1 |
| 6 | Inconsistent | 1 |
| 6 | Remarkable | 5 |
| 7 | Engaged | 2 |
| 7 | Remarkable | 3 |
| 7 | Transactional | 2 |
+--------+---------------+----+
И мне нужно сделать так, чтобы каждый параметр для метки (Inconsistent, Transactional, Engaged, Remarkable
) присутствовал для каждого периода. И если каждая метка не используется в каждом периоде, то она должна быть вставлена для этого периода со значением n
, равным 0.
Я подумал о повороте кадра данных от длинного к широкому, и затем заполнение пропущенных значений 0, но иногда каждое значение может не отображаться ни в одном из периодов. Я также подумал о группировке кадра данных по периодам и последующем полном объединении всех меток, но кажется, что группы игнорируются при присоединении кадра данных.
Мне нужно получить кадр данных, который выглядит следующим образом :
+--------+---------------+----+
| period | label | n |
+--------+---------------+----+
| 4 | Inconsistent | 0 |
| 4 | Transactional | 0 |
| 4 | Engaged | 2 |
| 4 | Remarkable | 1 |
| 5 | Inconsistent | 2 |
| 5 | Transactional | 0 |
| 5 | Engaged | 1 |
| 5 | Remarkable | 5 |
| 6 | Inconsistent | 1 |
| 6 | Transactional | 0 |
| 6 | Engaged | 1 |
| 6 | Remarkable | 5 |
| 7 | Inconsistent | 0 |
| 7 | Transactional | 2 |
| 7 | Engaged | 2 |
| 7 | Remarkable | 3 |
+--------+---------------+----+
Вот пример данных, с которыми я работаю:
df <- as.data.frame(
list(
period = c(4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L,
7L, 7L, 7L),
label = c(
"Engaged",
"Remarkable",
"Engaged",
"Inconsistent",
"Remarkable",
"Engaged",
"Inconsistent",
"Remarkable",
"Engaged",
"Remarkable",
"Transactional"
),
n = c(2L, 1L, 1L,
2L, 5L, 1L, 1L, 5L, 2L, 3L, 1L)
)
)
options <- as.data.frame(
list(
label = c(
"Inconsistent",
"Transactional",
"Engaged",
"Remarkable"
),
n = c(0L, 0L, 0L, 0L)
)
)