2012-01-04 66 views
0

如果这是一个问题,但我在论坛 找不到方法来搜索我正在尝试做什么,我先进道歉。 我有一个训练集,我试图找到一种方法来减少我的分类变量的级别数 (在下面的示例中,类别是状态)。我想将状态映射到关卡的平均值或速率。 我的训练集会是什么样一旦输入以下到一个数据帧:根据变量创建聚合列与R

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的方法将不胜感激。

回答

2

这真的是ave函数的设计目的。它真的可以使用类别来构建任何功能的结果,但其默认功能可按平均是因此而得名,即ave-(愤怒):

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

我接受了这个答案,因为它不需要我使用外部包。你能否在你的回答中反转州和班?例如:with(dfrm,ave(class,state)) – ak3nat0n 2012-01-07 01:11:36

1
library(plyr) 
    join(data,ddply(data,.(state),summarise,mean=mean(class)),by=("state"),type="left") 
+0

我认为它可能是简单的只使用'ddply'和'转换'(如果我已经正确理解了OP)。 – joran 2012-01-04 23:44:16

+0

其实我只是做了一个总结,但将它匹配回原始数据。我怀疑ddply语句本身是足够的,但OP可能将其作为原始数据的一部分。 – Maiasaura 2012-01-05 02:17:18