如何向R中的现有列添加方法

时间:2017-07-22 08:22:07

标签: r

我正在操纵数据集,但我无法做正确的事。

以下是此示例,其中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

1 个答案:

答案 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),]