Другая возможность может быть:
data %>%
group_by(condition) %>%
summarise_at(vars(mpg, cyl, wt), list(mean = ~ mean(.),
se = ~ sd(.)/sqrt(n()))) %>%
gather(var, val, -condition) %>%
separate(var, c("vars", "var2")) %>%
mutate(var2 = paste(toupper(var2), as.character(condition), sep = "_")) %>%
select(-condition) %>%
spread(var2, val)
vars MEAN_control MEAN_treat SE_control SE_treat
<chr> <dbl> <dbl> <dbl> <dbl>
1 cyl 6.5 5.88 0.387 0.499
2 mpg 18.2 22.0 1.04 1.77
3 wt 3.56 2.87 0.204 0.257
Здесь, после ваших начальных шагов, он выполняет преобразование данных с широкой в длинную, исключая столбец «условие». Во-вторых, он разделяет имена переменных на два столбца. В-третьих, он объединяет метрику и условие, причем метрика имеет верхний регистр. Наконец, он удаляет избыточную переменную и возвращает ее в нужный формат.
Или вы можете избежать separate()
с помощью некоторого регулярного выражения:
data %>%
group_by(condition) %>%
summarise_at(vars(mpg, cyl, wt), list(mean = ~ mean(.),
se = ~ sd(.)/sqrt(n()))) %>%
gather(var, val, -condition) %>%
mutate(vars = gsub("_.*$", "", var),
var2 = gsub(".*\\_", "", var)) %>%
mutate(var2 = paste(toupper(var2), as.character(condition), sep = "_")) %>%
select(-condition, -var) %>%
spread(var2, val)
Или с strsplit()
:
data %>%
group_by(condition) %>%
summarise_at(vars(mpg, cyl, wt), list(mean = ~ mean(.),
se = ~ sd(.)/sqrt(n()))) %>%
gather(var, val, -condition) %>%
mutate(vars = sapply(strsplit(var, "_"), function(x) x[1]),
var2 = sapply(strsplit(var, "_"), function(x) x[2])) %>%
mutate(var2 = paste(toupper(var2), as.character(condition), sep = "_")) %>%
select(-condition, -var) %>%
spread(var2, val)
Или вы можете полностью переписать его на:
data %>%
select(mpg, cyl, wt, condition) %>%
gather(vars, val, -condition) %>%
group_by(condition, vars) %>%
summarise(mean = mean(val),
se = sd(val)/sqrt(n())) %>%
ungroup() %>%
gather(var2, val, -c(condition, vars)) %>%
mutate(var2 = paste(toupper(var2), condition, sep = "_")) %>%
select(-condition) %>%
spread(var2, val)
В этом случае сначала выбираются интересующие переменные. Во-вторых, он выполняет преобразование из широкого в длинный формат, исключая столбец «условие». В-третьих, он группирует по условиям и именам переменных и вычисляет метрики. На четвертом шаге выполняется второе преобразование из широкой в длинную, за исключением столбца «условие» и столбца с исходными именами переменных. Наконец, он объединяет метрику (верхний регистр) и условие, удаляет избыточную переменную и возвращает ее в нужный формат.