【问题标题】:How to scale a variable by group如何按组缩放变量
【发布时间】:2014-01-11 18:22:00
【问题描述】:

非常感谢您在这个问题上的帮助。 我有以下数据集,我想创建一个新变量,该变量将包含给定因子变量的每个级别的标准化值(z 分布)。

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

   gender values
1    boy      1
2    boy      2  
3    boy      3
4   girl      6
5   girl      7
6   girl      8

我的目标是创建一个新变量,其中包含为每个因子水平(男孩和女孩)分别计算的 z 值。

还有一个问题。我主要想用 z 值创建一个变量。如果我想应用另一个函数,例如计算每个因子水平的分位数分布,会不会类似?

感谢您的帮助!

【问题讨论】:

    标签: r r-factor standardized


    【解决方案1】:

    您可以将scaleavetransform 一起使用:

    > 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、tapplydata.tableddply。看看this post

    【讨论】:

    • transform 中不需要with
    【解决方案2】:

    如何创建 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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多