Как скрестить два столбца из группового результата - PullRequest
1 голос
/ 09 марта 2020

Я сгенерировал сгруппированный фрейм данных, используя код ниже

df %>% group_by(stage, delay) 
   %>% summarise(n = n(),
                 mean = mean(eval))

Результат:

 stage  delay   mean
     2      3   0.261 
     2      1   0.325 
     2      2  -0.783 
     1      3  0.0226
     1      1  -0.435 
     1      2   0.491 

Что я ищу:

                  1       2       3   
       1     -0.435   0.491  0.0226
       2      0.325  -0.783   0.261 

Ответы [ 2 ]

3 голосов
/ 09 марта 2020

Мы можем добавить pivot_wider в конце

library(dplyr)
library(tidyr)
df %>%
    group_by(stage, delay) %>%
    summarise(n = n(), mean = mean(eval)) %>%
    pivot_wider(names_from = delay, values_from = mean)

Или с spread

    ... %>%
    spread(delay, mean)

В base R, мы также можем использовать xtabs

xtabs(mean ~ stage + delay, out)
# delay
#stage       1       2       3
#    1 -0.4350  0.4910  0.0226
#    2  0.3250 -0.7830  0.2610

данные

out <- structure(list(stage = c(2L, 2L, 2L, 1L, 1L, 1L), delay = c(3L, 
1L, 2L, 3L, 1L, 2L), mean = c(0.261, 0.325, -0.783, 0.0226, -0.435, 
0.491)), class = "data.frame", row.names = c(NA, -6L))
1 голос
/ 09 марта 2020

Другая базовая опция R использует reshape, то есть

dfout <- reshape(df[order(df$stage,df$delay),],
                 direction = "wide",
                 idvar = "stage",
                 timevar = "delay")

, такой, что

> dfout
  stage mean.1 mean.2 mean.3
5     1 -0.435  0.491 0.0226
2     2  0.325 -0.783 0.2610

DATA

df <- structure(list(stage = c(2L, 2L, 2L, 1L, 1L, 1L), delay = c(3L, 
1L, 2L, 3L, 1L, 2L), mean = c(0.261, 0.325, -0.783, 0.0226, -0.435, 
0.491)), class = "data.frame", row.names = c(NA, -6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...