我正在尝试创建一个新的时间序列变量,其中数据由4个静态变量和跨列的时间序列数据组成。 我需要从每个时间序列列中获取每年的值
A B C year Del_0 Del_1 Del_2 Del_3 Del_4.....
1 abc qwe 2012 1 2 3 4 5
1 abc qwe 2013 3 5 3 6 8
1 def qwe 2014 2 3 6 2 1
1 def qwe 2013 12 23 21 45 43
我需要得到第一个值,即最近一年的Del_0,去年的Del_1值,以及A,B和C各组中的等等。
我做了一个聚合来获得每个班级的最大年份
max_year<- aggregate(newdata$Year,by=list(newdata$A,newdata$B,newdata$C),max)
我将它合并回原始数据
newdata1<-merge(x=newdata,y=max_year,by=c("A","B","C"),all=TRUE)
newdata1$diff=newdata1$max_yr-newdata1$Year#Calculating difference
我正在尝试使用差异值来获取最近一年的Del_0值,该差异值是每组中最近一年的0。
我正在尝试使用for循环。
for(i in 0:4){
df[[paste(i, 'AVG', sep="_")]]<-newdata1$Del[i]
}
final data would be
A B C year Del_0 Del_1 Del_2 Del_3 Del_4.....Avg0 Avg1 Avg2 Avg3 Avg4
1 abc qwe 2012 1 2 3 4 5 2
1 abc qwe 2013 3 5 3 6 8 3
1 def qwe 2013 12 23 21 45 43 23
1 def qwe 2014 2 3 6 2 1 2
答案 0 :(得分:0)
我们可以使用data.table
轻松完成此操作。获取“newdata”('i1')中以“Del”开头的列名称,删除子字符串前缀,直到带_
的{{1}}。将“data.frame”转换为“data.table”(sub
),按“A”,“B”和“C”列分组,并将setDT(newdata)
指定为“i1” ,我们循环遍历Data.table的子集(.SDcols
)并获取lapply(.SD, ...
,将输出分配(max
)到新列'即“Avg0”,“Avg1”(使用:=
创建)。
paste0