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

问题描述 投票:0回答:2

我正在尝试为我的数据中的每个唯一因子分组引入标准偏差。我已经研究了使用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 
r
2个回答
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


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
© www.soinside.com 2019 - 2024. All rights reserved.