使用for循环从现有列为新变量赋值

时间:2016-08-19 11:14:38

标签: r for-loop

我正在尝试创建一个新的时间序列变量,其中数据由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 

1 个答案:

答案 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