我正在操纵数据集,但我无法做正确的事。
以下是此示例,其中df
是数据框的名称。
year ID value
2013 1 10
2013 2 20
2013 3 10
2014 1 20
2014 2 20
2014 3 30
2015 1 20
2015 2 10
2015 3 30
所以我尝试制作另一个数据框df1 <- aggregate(value ~ year, df, mean, rm.na=T)
并制作了此数据框df1
:
year ID value
2013 avg 13.3
2014 avg 23.3
2015 avg 20
但我想逐年将每个平均值添加到df
的每一行。
预期的形式是:
year ID value
2013 1 10
2013 2 20
2013 3 10
2013 avg 13.3
2014 1 20
2014 2 20
2014 3 30
2014 avg 23.3
2015 1 20
2015 2 10
2015 3 30
2015 avg 20
答案 0 :(得分:1)
以下是data.table
选项,我们将'data.frame'转换为'data.table'(setDT(df)
),按'年'分组,获取'mean
将'value'和'ID'作为'avg',然后使用rbindlist
将数据集和order
转换为'year'
library(data.table)
rbindlist(list(setDT(df), df[, .(ID = 'avg', value = mean(value)), year]))[order(year)]
# year ID value
# 1: 2013 1 10.00000
# 2: 2013 2 20.00000
# 3: 2013 3 10.00000
# 4: 2013 avg 13.33333
# 5: 2014 1 20.00000
# 6: 2014 2 20.00000
# 7: 2014 3 30.00000
# 8: 2014 avg 23.33333
# 9: 2015 1 20.00000
#10: 2015 2 10.00000
#11: 2015 3 30.00000
#12: 2015 avg 20.00000
或者使用OP的方法,rbind
数据集然后order
df2 <- rbind(df, transform(df1, ID = 'avg'))
df2 <- df2[order(df2$year),]