У меня есть группа данных dat. Зависимая переменная и, две независимые переменные x, z (каждая из них на десяти уровнях).
Я использую tapply, чтобы вычислять средний показатель и для каждого уровня x:
means <- tapply(dat$y,dat$x,mean)
Сейчас я пробую получать средние показатели и для каждой комбинации x и z. Я это попробовал, если успех:
means <- tapply(dat$y,dat$x & dat$z,mean)
Я благодарен за комментарии.
Я рекомендую использовать пакет dplyr
, ввиду того, что ты работаешь с data.frame
, этот пакет estÃ: ориентируемый, чтобы работать с этим типом объектов. AdemÃ: s, если ты будешь нуждаться в том, чтобы группировать из-за mÃ: s переменная, это не много код, который ты должен менять этого примера:
, Если мы хотим получить средний показатель переменной mpg
согласно комбинациям между am
и vs
, мы должны делать:
library(dplyr)
head(mtcars)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#> Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#> Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#> Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#> Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#> Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
mt_agrupada <- group_by(mtcars, am, vs)
mt_resumida <- summarise(mt_agrupada, media_mpg = mean(mpg))
mt_resumida
#> am vs media_mpg
#> <dbl> <dbl> <dbl>
#> 1 0. 0. 15.0
#> 2 0. 1. 20.7
#> 3 1. 0. 19.8
#> 4 1. 1. 28.4
С tapply()
podr¦-схвати делать следующее (я возьму пример jbkunst):
tapply(mtcars$mpg, paste(mtcars$am,mtcars$vs), mean)
0 0 0 1 1 0 1 1
15.05000 20.74286 19.75000 28.37143
, Поскольку ты видишь, мы используем просто один paste()
, чтобы "прикреплять" две колонны, según documentaci¦n tapply()
этот параметр coerciona в один factor
, из-за которого l¦gicamente deber¦-хозяева оставлять себе únicamente комбинации únicas обоих колонн. Конечный результат, поскольку ты можешь видеть, - array
d¦nde каждая колонна представляет определенный combinaci¦n. В каких-то случаях, как он предложил тебе jbkunst, выводе табулировать - mÃ: s яичный белок и fÃ: cil манипулирования, который podr¦-эксперт производить используя aggregate()
, bÃ: sicamente - немного asà - как GROUP BY
SQL
или group_by
dplyr
:
aggregate(mpg ~ am + vs, data=mtcars, FUN=mean)
am vs mpg
1 0 0 15.05000
2 1 0 19.75000
3 0 1 20.74286
4 1 1 28.37143