为每个独特因子分组添加标准差

时间:2014-09-29 22:15:20

标签: r

我试图为我的数据中的每个唯一因子分组引入标准偏差。我使用data.table包和plyr包研究了技术并且没有运气。以下是我试图完成的基本示例。

Group  Hours
  120     45
  120     60
  120     54
  121     33
  121     55
  121     40

我试图将上述内容变为:

Group  Hours     SD
  120     45  7.343
  120     60  7.343
  120     54  7.343
  121     33  9.833
  121     55  9.833
  121     40  9.833 

2 个答案:

答案 0 :(得分:4)

基础解决方案(假设您的数据名为df

transform(df, SD = ave(Hours, Group, FUN = sd))

data.table解决方案

library(data.table)  
setDT(df)[, SD := sd(Hours), by = Group]

dplyr解决方案

library(dplyr)
df %>%
  group_by(Group) %>%
  mutate(SD = sd(Hours))

这是你要求的plyr解决方案(我的第一个)

library(plyr)
ddply(df, .(Group), mutate, SD = sd(Hours))

(最好避免同时加载plyrdplyr

答案 1 :(得分:0)

感谢David,您的详细回复!我已经使用data.table来编写我正在寻找的东西。这是我用David的答案写的最后一个剧本的片段。

PayrollHoursSD <- as.data.table(PayrollHours2)[, SD := sd(TOTAL.HOURS), by = COMBO]
head(PayrollHoursSD)

#    COMBO    PAY.END.DATE  TOTAL.HOURS          SD
# 1:   1-2           10-06     42561.78    4297.287
# 2:   1-2           10-13     42177.88    4297.287
# 3:   1-2           10-20     44691.23    4297.287
# 4:   1-2           10-27     42709.28    4297.287
# 5:   1-2           11-03     44876.25    4297.287
# 6:   1-2           11-10     40582.44    4297.287