Рассмотрим набор данных, показывающий результаты для контрольной и двух экспериментальных обработок для мужчин и женщин вместе с размерами для каждой обработки:
library(tidyverse)
mydf <- data_frame( treatment = c('ctrl','low','high','ctrl','low','high'),
gender = c('male','male','male','female','female','female'),
size = c(10,20,30,10,20,30),
result = c(0.11, 0.32, 0.25, 0.15, 0.38, 0.55) )
treatment gender size results
ctrl male 10 0.11
low male 20 0.32
high male 30 0.25
ctrl female 10 0.15
low female 20 0.35
high female 30 0.55
Чтобы сравнить контроль с экспериментальными обработками бок о бок, я хотел бы изменить структуру данных следующим образом:
treatment gender ctrl_size size ctrl_result result
low female 10 20 0.15 0.38
high female 10 30 0.15 0.55
low male 10 20 0.11 0.32
high male 10 30 0.11 0.25
Моя попытка ниже работает, но мне кажется обременительной, поскольку она создает вспомогательные фреймы данных перед их объединением в последний:
mydf_result <- mydf %>%
select(-size) %>%
spread(treatment, result) %>%
gather(treatment, result, c(low, high) ) %>%
rename(ctrl_result = ctrl)
mydf_size <- mydf %>%
select(-result) %>%
spread(treatment, size) %>%
gather(treatment, size, c(low, high)) %>%
rename(ctrl_size = ctrl)
mydf_final <-
full_join(mydf_result, mydf_size, by = c('treatment', 'gender')) %>%
select(treatment, gender, ctrl_size, size, ctrl_result, result) %>%
arrange(gender)
# A tibble: 4 × 6
treatment gender ctrl_size size ctrl_result result
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 low female 10 20 0.15 0.38
2 high female 10 30 0.15 0.55
3 low male 10 20 0.11 0.32
4 high male 10 30 0.11 0.25
Можно ли достичь вышеуказанного в рамках одного конвейера?
mydf
принадлежат одному и тому же человеку, чтобы иметь возможность это сделать? - person Joe   schedule 02.11.2016