Простой (?) tidyr
вопрос:
У меня есть data.frame
, в котором есть несколько столбцов группировки и несколько столбцов значений в длинном формате. Я хочу преобразовать его в короткий (широкий) формат, где key
будет одним из столбцов группировки, а результирующий data.frame
будет иметь столбец для каждой комбинации всех других столбцов группировки и каждого из столбцов значений.
Вот мой длинный формат data.frame
:
set.seed(1)
library(dplyr)
df <- data.frame(treatment = rep(c(rep("T1",3),rep("T2",3)),2),
species = c(rep("S1",6),rep("S2",6)),
group = rep(LETTERS[1:3],4),
n = as.integer(runif(12,10,20))) %>%
dplyr::group_by(treatment,species) %>% dplyr::mutate(freq = n/sum(n))
И вот что я хочу получить в результате широкоформатного data.frame
:
res.df <- data.frame(group = LETTERS[1:3],
T1.S1.n = dplyr::filter(df,treatment == "T1",species == "S1")$n,
T1.S1.freq = dplyr::filter(df,treatment == "T1",species == "S1")$freq,
T2.S1.n = dplyr::filter(df,treatment == "T2",species == "S1")$n,
T2.S1.freq = dplyr::filter(df,treatment == "T2",species == "S1")$freq,
T1.S2.n = dplyr::filter(df,treatment == "T1",species == "S2")$n,
T1.S2.freq = dplyr::filter(df,treatment == "T1",species == "S2")$freq,
T2.S2.n = dplyr::filter(df,treatment == "T2",species == "S2")$n,
T2.S2.freq = dplyr::filter(df,treatment == "T2",species == "S2")$freq)