我非常感谢你对这个问题的帮助。 我有以下数据集,我想创建一个新变量,它将包含给定因子变量的每个级别的标准化值(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值创建一个变量。如果我想应用另一个函数并且例如计算每个因子级别的分位数分布,它会是相似的吗?
感谢您的帮助!
答案 0 :(得分: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)
使用来自plyr ddply
,tapply
的{{1}}有很多方法。看看this post
答案 1 :(得分:0)
如何创建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