【问题标题】:Rolling Mean with Plyr用 Plyr 滚动平均
【发布时间】:2012-04-04 19:45:10
【问题描述】:

我正在尝试使用 plyr 计算滚动平均值。数据是行业国家年份的数据,对每个行业国家都有重复观察。数据不平衡,但大多数工业国家有大约 15 个观测值。

例如数据如下所示:

country       ISIC      Year      Value
Algeria        1        1990       400
Algeria        1        1991       450
Algeria        1        1992       460
Algeria        2        1990       450
Algeria        2        1991       500
Algeria        2        1992       450
Argentina      1        1990       400
Argentina      1        1991       450
Argentina      1        1992       460
Argentina      2        1990       450
Argentina      2        1991       500
Argentina      2        1992       450
.              .        .          .
.              .        .          .

如果我将数据子集到特定行业和国家/地区,我可以像这样计算滚动平均值

rollmean(subdata$Value, 3)

但是,我无法让它与 plyr 一起使用,从而计算每个行业国家组的滚动平均值。 我试过了:

roll <- ddply(data, .(country, ISIC), summarize, rollmean(data$Value, 3))

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    滚动平均值必然会缩短数据,这也是导致错误的部分原因。

    ddply(dat, .(country, ISIC), function(df) data.frame(country=unique(df$country),                  
                                                         ISIC=unique(df$ISIC),
                                                         rolled=rollmean(df$Value, 3)))
        country ISIC   rolled
    1   Algeria    1 436.6667
    2   Algeria    2 466.6667
    3 Argentina    1 436.6667
    4 Argentina    2 466.6667
    

    但是,如果您对 3 个样本进行滚动平均,而您的数据只有 3 个样本,那么您只是在计算平均值:

    ddply(dat, .(country, ISIC), summarise, mean(Value))
    
        country ISIC      ..1
    1   Algeria    1 436.6667
    2   Algeria    2 466.6667
    3 Argentina    1 436.6667
    4 Argentina    2 466.6667
    

    更新评论:

    要返回日期,您可以使用na.pad 参数到rollmean

    ddply(dat, .(country, ISIC), function(df) {df$rolled <- rollmean(df$Value, 3, na.pad=TRUE); return(df)})
    

    【讨论】:

    • 我仍然收到以下错误:错误:k
    • 那是因为您有一些样本少于 3 个结果:rollmean(1:5, 6) 给出了同样的错误!
    • 我删除了所有观察次数少于 3 的组,现在代码正在运行。但是如何将新的滚动平均值与原始数据集合并?当我尝试 data$rollingmean
    猜你喜欢
    • 2013-12-22
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多