Как я могу разложить повторяющиеся измерения нескольких переменных в широкий формат?
Я пытаюсь взять столбцы, которые находятся в длинном формате, и распространить их на широкий формат, как показано ниже. Я хотел бы использовать tidyr, чтобы решить эту проблему с помощью инструментов обработки данных, в которые я инвестирую, но чтобы сделать этот ответ более общим, пожалуйста, предоставьте другие решения.
Вот что у меня есть:
library(dplyr); library(tidyr)
set.seed(10)
dat <- data_frame(
Person = rep(c("greg", "sally", "sue"), each=2),
Time = rep(c("Pre", "Post"), 3),
Score1 = round(rnorm(6, mean = 80, sd=4), 0),
Score2 = round(jitter(Score1, 15), 0),
Score3 = 5 + (Score1 + Score2)/2
)
## Person Time Score1 Score2 Score3
## 1 greg Pre 80 78 84.0
## 2 greg Post 79 80 84.5
## 3 sally Pre 75 74 79.5
## 4 sally Post 78 78 83.0
## 5 sue Pre 81 78 84.5
## 6 sue Post 82 81 86.5
Желаемый широкий формат:
Person Pre.Score1 Pre.Score2 Pre.Score3 Post.Score1 Post.Score2 Post.Score3
1 greg 80 78 84.0 79 80 84.5
2 sally 75 74 79.5 78 78 83.0
3 sue 81 78 84.5 82 81 86.5
Я могу сделать это, сделав что-то вроде этого для каждого счета:
spread(dat %>% select(Person, Time, Score1), Time, Score1) %>%
rename(Score1_Pre = Pre, Score1_Post = Post)
И затем с помощью _join
, но это кажется многословным и как будто должно быть более эффективный способ.
Сопутствующие вопросы:
тидир от широкого до длинного с двумя повторными мерами
можно ли использовать разброс по нескольким столбцам в tidyr, подобный dcast?
3 ответа:
Если вы хотите придерживаться
tidyr/dplyr
dat %>% gather(temp, score, starts_with("Score")) %>% unite(temp1, Time, temp, sep = ".") %>% spread(temp1, score)