Мы можем создать уникальный индекс для каждой группы, а затем использовать pivot_wider
, который теперь позволяет включать значения из нескольких столбцов.
library(dplyr)
df %>%
group_by(treatment) %>%
mutate(row = row_number()) %>%
tidyr::pivot_wider(names_from = row, values_from = c(param1, param2))
# treatment param1_1 param1_2 param2_1 param2_2
# <fct> <int> <int> <int> <int>
#1 tx1 20 22 300 310
#2 tx2 155 160 400 403
#3 tx3 34 40 900 890
Использование data.table
library(data.table)
dcast(setDT(df), treatment~rowid(treatment), value.var = c('param1', 'param2'))
data
df <- structure(list(treatment = structure(c(1L, 1L, 2L, 2L, 3L, 3L
), .Label = c("tx1", "tx2", "tx3"), class = "factor"), param1 = c(20L,
22L, 155L, 160L, 34L, 40L), param2 = c(300L, 310L, 400L, 403L,
900L, 890L)), class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))