按比例将比例列添加到数据框

时间:2013-10-13 22:19:34

标签: r

我正在尝试将一列添加到由一个因子组成的归一化值的数据框中。

例如:

'data.frame':   261 obs. of  3 variables:
 $ Area   : Factor w/ 29 levels "Antrim","Ards",..: 1 1 1 1 1 1 1 1 1 2 ...
 $ Year   : Factor w/ 9 levels "2002","2003",..: 1 2 3 4 5 6 7 8 9 1 ...
 $ Arrests: int  18 54 47 70 62 85 96 123 99 38 ... 

我想添加一个列,这些列是按区域按组归一化的Arrests值。

我提出的最好的是:

data$Arrests.norm <- unlist(unname(by(data$Arrests,data$Area,function(x){ scale(x)[,1] } )))

此命令处理但数据被加扰,即规范化的值与数据框中的正确区域不匹配。

感谢您的提示。

编辑:只是为了澄清我对拼写数据的意思,在我的代码输出之后对数据帧进行子集化,如下所示,其中规范化值明显属于另一个因子组。

      Area Year Arrests Arrests.norm
199 Larne 2002      92 -0.992843957
200 Larne 2003     124 -0.404975825
201 Larne 2004      89 -1.169204397
202 Larne 2005      94 -0.581336264
203 Larne 2006      98 -0.228615385
204 Larne 2007       8  0.006531868
205 Larne 2008      31  0.418039561
206 Larne 2009      25  0.947120880
207 Larne 2010      22  2.005283518

2 个答案:

答案 0 :(得分:3)

跟进您的by尝试:

df <- data.frame(A = factor(rep(c("a", "b"), each = 4)),
                 B = sample(1:4, 8, TRUE))

ll <- by(data = df, df$A, function(x){
  x$B_scale <- scale(x$B)
  x
  }
   )

df2 <- do.call(rbind, ll)

答案 1 :(得分:2)

data <- transform(data, Arrests.norm = ave(Arrests, Area, FUN = scale))

会做到这一点。

相关问题