Я думаю, что мы можем использовать pivot_wider
здесь:
tidyr::pivot_wider(df, names_from = Samp_Num, values_from = Mark1:Mark3))
#OR
#tidyr::pivot_wider(df, names_from = Samp_Num, values_from = starts_with("Mark"))
# A tibble: 3 x 13
# ID Mark1_time1 Mark1_time2 Mark1_time3 Mark1_time4 Mark2_time1 Mark2_time2
# <fct> <fct> <fct> <fct> <fct> <fct> <fct>
#1 Lion1 Marker1 Marker1 Marker1 Marker1 Marker2 Marker2
#2 Lion2 Marker1 Marker1 Marker1 Marker1 Marker2 Marker2
#3 Lion3 Marker1 Marker1 Marker1 Marker1 Marker2 Marker2
# … with 6 more variables: Mark2_time3 <fct>, Mark2_time4 <fct>,
# Mark3_time1 <fct>, Mark3_time2 <fct>, Mark3_time3 <fct>, Mark3_time4 <fct>
В моих выборочных данных у нас есть 3 столбца Mark, и теперь у нас есть 13 столбцов в конечном выводе (3 * 4 для каждого времени + 1) , Аналогично, для ваших фактических данных у вас должно быть 369 столбцов (92 * 4 + 1).
data
Создан небольшой пример данных
df <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
3L, 3L, 3L, 3L), .Label = c("Lion1", "Lion2", "Lion3"), class = "factor"),
Samp_Num = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L,
2L, 3L, 4L), .Label = c("time1", "time2", "time3", "time4"
), class = "factor"), Mark1 = structure(c(1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Marker1", class = "factor"),
Mark2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L), .Label = "Marker2", class = "factor"), Mark3 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Marker3", class = "factor")),
class = "data.frame", row.names = c(NA, -12L))