基于R中的前一行填充值(如excel中的值)
我的问题是,我应该使用什么包来填充像excel中那样的新行,还是需要一个循环 例如,如果我的数据DF1是基于R中的前一行填充值(如excel中的值),r,R,我的问题是,我应该使用什么包来填充像excel中那样的新行,还是需要一个循环 例如,如果我的数据DF1是 Dates aa bb 2000 q1 1 2 2000 q2 2 3 2000 q3 3 4 然后我想找出接下来的3个季度,我有DF2的增长率: Dates aa_g bb_g 2000 q4 0.1 0.2 2001 q1 0.2 0.2 2001 q2 0.3
Dates aa bb
2000 q1 1 2
2000 q2 2 3
2000 q3 3 4
然后我想找出接下来的3个季度,我有DF2的增长率:
Dates aa_g bb_g
2000 q4 0.1 0.2
2001 q1 0.2 0.2
2001 q2 0.3 0.3
我想生成的最后一个表是:
Dates aa bb
2000 q1 1 2
2000 q2 2 3
2000 q3 3 4
2000 q4 3.3 4.8
2001 q1 3.96 5.8
2001 q2 5.15 7.5
我将在excel中复制的结果很简单,基本上是DF1*(1+增长率行(DF2))的最后一行,并将其向下拖动。在r中,要根据以前的值生成新行,我需要首先创建一个带有日期的新数据框并为其编写循环,还是有更简单的方法
谢谢!
下面是创建上面的小df的一些代码:
Dates=seq(as.Date("2000/1/1"), as.Date("2000/9/1"), by = "quarter")
aa= seq(1,3)
bb= seq(2,4)
df1<-data.frame(Dates,aa,bb)
Dates=seq(as.Date("2000/12/1"), as.Date("2001/6/1"), by = "quarter")
aa_g= seq(0.1,0.3, by=0.1)
bb_g= c(0.2,0.2,0.3)
df2<-data.frame(Dates,aa_g,bb_g)
Dates=seq(截止日期(“2000/1/1”),截止日期(“2000/9/1”),by=“季度”)
aa=序号(1,3)
bb=序号(2,4)
df1这里有一个基本的R方法:
#Take last row of df1
a <- df1[nrow(df1), -1]
#Calculate cumulative product of df2 and multiply it with last row of df1
df2[-1] <- sweep(sapply(df2[-1], function(x) cumprod(1 + x)), 2, unlist(a), `*`)
#Assign names of df1 to df2
names(df2) <- names(df1)
#Combine the two dataframes
result <- rbind(df1, df2)
result
# Dates aa bb
#1 2000-01-01 1.000 2.000
#2 2000-04-01 2.000 3.000
#3 2000-07-01 3.000 4.000
#4 2000-12-01 3.300 4.800
#5 2001-03-01 3.960 5.760
#6 2001-06-01 5.148 7.488
#取df1的最后一行
a谢谢ronak!非常酷,cumprod肯定能完成这项工作。你能解释一下未列出的(a),“*”在结尾是什么吗?sweep
的第三个参数需要一个向量,a
是一个数据帧,所以我未列出它使其成为一个向量,*
用于按行多个df2
和a
。