Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于R中的前一行填充值(如excel中的值)_R - Fatal编程技术网

基于R中的前一行填充值(如excel中的值)

基于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

我的问题是,我应该使用什么包来填充像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      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