вычислить средние значения для комбинаций из 2 столбцов с помощью dplyr

#r #dplyr #pivot-table

#r #dplyr #сводная таблица

Вопрос:

Я надеюсь на помощь в создании средних значений для комбинаций из нескольких столбцов df с использованием dplyr, и — предполагая, что это возможно — я не могу получить правильный синтаксис.

 df <- data.frame(trt1=c(replicate(6, "far"), replicate(6, "near")),
                 trt2=rep(c("A","A","A","B","B","B"), 2), 
                 count=sample(1:8, 12, replace=T))
  

Я знаю, как получить средние значения по одному столбцу:

 df %>% group_by(trt1) %>% summarise(avg=mean(count))
  

Но не могу понять синтаксис для комбинаций столбцов: далеко x A, далеко x B, рядом с x A, рядом с x B.

Большое спасибо.

Ответ №1:

Добавьте trt2 в инструкцию group_by.

 df %>% group_by(trt1,trt2) %>% summarise(avg=mean(count))

    trt1   trt2      avg
  <fctr> <fctr>    <dbl>
1    far      A 3.000000
2    far      B 1.333333
3   near      A 5.000000
4   near      B 4.666667
  

Комментарии:

1. МО*#@@*КЕР! Я пытался сделать это df %>%group_by(trt1) %>% group_by(trt2) %>% summarise (среднее значение (количество))

2. Большое спасибо — моя головная боль внезапно прошла.

Ответ №2:

Простая линейная модель также дает ответ в этом случае (просто напомню об удалении перехвата для получения правильных контрастов) (я немного настроил, чтобы придать dplyr вид)

 df %>% lm(count~trt1:trt2-1, .) %>% .$coef
#### trt1far:trt2A trt1near:trt2A  trt1far:trt2B trt1near:trt2B 
####      4.000000       4.333333       4.000000       4.666667 
  

(поскольку нет начального значения для определения ваших данных.Фрейм, результат отличается от других ответов)