我试图为我的数据中的每个唯一因子分组引入标准偏差。我使用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
答案 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))
(最好避免同时加载plyr
和dplyr
)
答案 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