【问题标题】:Taking variance of some rows above in panel structrure (R data table )在面板结构(R数据表)中对上面的一些行进行方差
【发布时间】:2020-12-13 02:07:54
【问题描述】:
# Example of a panel data
library(data.table)
panel<-data.table(expand.grid(Year=c(2017:2020),Individual=c("A","B","C")))
panel$value<-rnorm(nrow(panel),10) # The value I am interested in

我想用Individual 取前两年value 的方差。 例如,如果我要总结前两年的价值,我会这样做:

panel[,sum_of_past_2_years:=shift(value)+shift(value, 2),Individual]

我认为这会起作用。

panel[,var(c(shift(value),shift(value, 2))),Individual]
# This doesn't work of course

理想的答案应该是这样的

a<-c(NA,NA,var(panel$value[1:2]),var(panel$value[2:3]))
b<-c(NA,NA,var(panel$value[5:6]),var(panel$value[6:7]))
c<-c(NA,NA,var(panel$value[9:10]),var(panel$value[10:11]))
panel[,variance_past_2_years:=c(a,b,c)]
# NAs when there is no value for 2 prior years

【问题讨论】:

    标签: r datatable


    【解决方案1】:

    您可以使用frollapply对每2个值进行滚动操作。

    library(data.table)
    panel[, var := frollapply(shift(value), 2, var), Individual]
    
    #    Year Individual     value        var
    # 1: 2017          A  9.416218         NA
    # 2: 2018          A  8.424868         NA
    # 3: 2019          A  8.743061 0.49138739
    # 4: 2020          A  9.489386 0.05062333
    # 5: 2017          B 10.102086         NA
    # 6: 2018          B  8.674827         NA
    # 7: 2019          B 10.708943 1.01853361
    # 8: 2020          B 11.828768 2.06881272
    # 9: 2017          C 10.124349         NA
    #10: 2018          C  9.024261         NA
    #11: 2019          C 10.677998 0.60509700
    #12: 2020          C 10.397105 1.36742220
    

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2018-01-18
      • 2017-12-07
      • 1970-01-01
      • 2020-07-15
      • 2020-09-19
      相关资源
      最近更新 更多