在 R 中的两列中创建一个数字序列
Create a sequence of numbers in two columns in R
给定数据框中的两个数字列,遵循一个序列:
df = data.frame(year=c(2000,2000,2000,2001,2001,2001,2002,2002,2002,2003),
period=c(1,2,3,1,2,3,1,2,3,1))
此数据框的规则是,每当第二列 period
达到最大值(在本例中为 3)时,第一列 year
总和为 1。
通过一个函数或库,如何才能按照顺序提前一些步骤? ,例如 3.
为了清楚起见,此序列的预期输出,每列中的以下 3 个数字为:
output = data.frame(year=c(2003,2003,2004),
period=c(2,3,1))
这在很大程度上取决于您的数据,您必须为特定序列拟合特定公式,因为该序列可能采用的路径有无限多种。话虽如此,这里有一种不太漂亮的方法可以达到您想要的结果。
df$time=seq_along(df$year)
n=6
mod=lm(year~time,data=df)
pre=round(predict(mod,data.frame(time=(nrow(df)+1):(nrow(df)+n))))
pre
1 2 3 4 5 6
2003 2003 2004 2004 2004 2005
mod2=lm(period~year+time,data=df)
predict(mod2,data.frame(year=pre,time=(nrow(df)+1):(nrow(df)+n)))
1 2 3 4 5 6
2 3 1 2 3 1
根据您的整体项目,也许您可以直接生成数据:
expand.grid(period = 1:3,
year = 2000:2004)
给定数据框中的两个数字列,遵循一个序列:
df = data.frame(year=c(2000,2000,2000,2001,2001,2001,2002,2002,2002,2003),
period=c(1,2,3,1,2,3,1,2,3,1))
此数据框的规则是,每当第二列 period
达到最大值(在本例中为 3)时,第一列 year
总和为 1。
通过一个函数或库,如何才能按照顺序提前一些步骤? ,例如 3.
为了清楚起见,此序列的预期输出,每列中的以下 3 个数字为:
output = data.frame(year=c(2003,2003,2004),
period=c(2,3,1))
这在很大程度上取决于您的数据,您必须为特定序列拟合特定公式,因为该序列可能采用的路径有无限多种。话虽如此,这里有一种不太漂亮的方法可以达到您想要的结果。
df$time=seq_along(df$year)
n=6
mod=lm(year~time,data=df)
pre=round(predict(mod,data.frame(time=(nrow(df)+1):(nrow(df)+n))))
pre
1 2 3 4 5 6
2003 2003 2004 2004 2004 2005
mod2=lm(period~year+time,data=df)
predict(mod2,data.frame(year=pre,time=(nrow(df)+1):(nrow(df)+n)))
1 2 3 4 5 6
2 3 1 2 3 1
根据您的整体项目,也许您可以直接生成数据:
expand.grid(period = 1:3,
year = 2000:2004)