Как стандартизировать переменную на основе уровней факторов и создать новую переменную в R

Я был бы очень признателен за вашу помощь в этом вопросе. У меня есть следующий набор данных, и я хотел бы создать новую переменную, которая будет содержать стандартизированные значения (z-распределение) на уровень данной фактор-переменной.

x<-data.frame(gender=c("boy","boy","boy","girl","girl","girl"),values=c(1,2,3,6,7,8)) 
x
> x 
 gender values
1 boy 1
2 boy 2 
3 boy 3
4 girl 6
5 girl 7
6 girl 8

Моя цель - создать одну новую переменную, которая будет содержать значения z, рассчитанные отдельно для каждого уровня фактора (для мальчиков и для девочек).

И еще один вопрос. В основном я хотел бы создать переменную с z-значениями. Было бы аналогичным, если бы я хотел применить другую функцию и, например, вычислить распределение в квантилях на факторный уровень?

Спасибо за помощь!

2 ответа

Вы можете использовать scale с ave и transform:

> transform(x, z_score=ave(values, gender, FUN=scale))
 gender values z_score
1 boy 1 -1
2 boy 2 0
3 boy 3 1
4 girl 6 -1
5 girl 7 0
6 girl 8 1

aggregate также полезен

> aggregate(values ~ gender, scale, data=x)

И есть много способов использовать ddply из plyr, tapply, data.table. Взгляните на этот пост


На вопрос о том, как создать z, уже был дан ответ.

Здесь можно вычислить квантили для каждого уровня фактора:

with(x, tapply(values, gender, FUN = quantile))
# $boy
# 0% 25% 50% 75% 100% 
# 1.0 1.5 2.0 2.5 3.0 
#
# $girl
# 0% 25% 50% 75% 100% 
# 6.0 6.5 7.0 7.5 8.0

licensed under cc by-sa 3.0 with attribution.