1

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

    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 ......因此平均列可以用作 state 列的替代品 有没有在 R 中编写显式循环的好方法?

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

4

2 回答 2

3

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

dfrm$mean <- with( dfrm, ave( class, state ) ) #FUN=mean is the default "setting"
于 2012-01-05T00:03:11.570 回答
1
    library(plyr)
    join(data,ddply(data,.(state),summarise,mean=mean(class)),by=("state"),type="left")
于 2012-01-04T23:21:24.460 回答