【问题标题】:create aggregate column based on variables with R [duplicate]基于具有R的变量创建聚合列[重复]
【发布时间】:2012-02-02 20:25:51
【问题描述】:

如果这是一个菜鸟问题,我提前道歉,但我查看了论坛 并且找不到搜索我想要做的事情的方法。 我有一个训练集,我正在尝试找到一种方法来减少我的分类变量的级别数 (在下面的示例中,类别是状态)。我想将状态映射到水平的平均值或比率。 一旦输入到数据框中,我的训练集将如下所示:

    state class mean
1      CA     1    0
2      AZ     1    0
3      NY     0    0
4      CA     0    0
5      NY     0    0
6      AZ     0    0
7      AZ     1    0
8      AZ     0    0
9      CA     0    0
10     VA     1    0

我希望我的数据框中的第三列是基于类变量的第一列(状态)的平均值。所以 CA 行的平均值将为 0.333 ... 以便平均列可以用作状态列的替代品 有没有在 R 中不写显式循环的好方法?

如果我的训练集不包含新级别(例如新状态),如何映射它们?任何指向 R 中方法的链接将不胜感激。

【问题讨论】:

    标签: r data-mining aggregate mean


    【解决方案1】:

    这正是ave 函数的设计目的。它确实可以用于按类别构造任何函数结果,但它的默认函数是 mean 因此得名,即 ave-(rage):

    dfrm$mean <- with( dfrm, ave( class, state ) ) #FUN=mean is the default "setting"
    

    【讨论】:

    • 我接受了这个答案,因为它不需要我使用外部包。您能否在答案中颠倒状态和类别?例如:with(dfrm,ave(class,state))
    【解决方案2】:
        library(plyr)
        join(data,ddply(data,.(state),summarise,mean=mean(class)),by=("state"),type="left")
    

    【讨论】:

    • 我认为使用ddplytransform 可能更简单(如果我正确理解了OP)。
    • 其实我只是做了一个总结,但匹配回原始数据。我怀疑单独的 ddply 语句就足够了,但 OP 可能会将其作为原始数据的一部分。
    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2015-05-17
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多