我有一个包含项目名称,开始年份和合同期限的数据集。我需要将这个数据集开发成时间序列。例如,我的数据集中的一行是:项目A,2003年开始和合同期限5.我想根据合同期限重复每一行。我的数据集如下所示:
Project Name Start Year Contract Term
A 2003 5
B 2013 3
C 2000 2
我想要的结果应该是这样的:
Project Name Start Year Contract Term
A 2003 5
A 2004 5
A 2005 5
A 2006 5
A 2007 5
B 2013 3
B 2014 3
B 2014 3
C 2000 2
C 2001 2
我试过了:
rpsData <- rpsInput[rep(rownames(rpsInput), rpsInput$Contract.Term), ]
但这仅以合同期限中的数字重复每个项目。我不能让它增加岁月。
提前致谢!
答案 0 :(得分:2)
这是分两步:
第1步,你知道:
rpsData <- rpsInput[rep(rownames(rpsInput), rpsInput$Contract.Term), ]
rpsData
# Project.Name Start.Year Contract.Term
# 1 A 2003 5
# 1.1 A 2003 5
# 1.2 A 2003 5
# 1.3 A 2003 5
# 1.4 A 2003 5
# 2 B 2013 3
# 2.1 B 2013 3
# 2.2 B 2013 3
# 3 C 2000 2
# 3.1 C 2000 2
第2步使用sequence
和基本添加:
sequence(rpsInput$Contract.Term) ## This will be helpful...
# [1] 1 2 3 4 5 1 2 3 1 2
rpsData$Start.Year <- rpsData$Start.Year + sequence(rpsInput$Contract.Term)
rpsData
# Project.Name Start.Year Contract.Term
# 1 A 2004 5
# 1.1 A 2005 5
# 1.2 A 2006 5
# 1.3 A 2007 5
# 1.4 A 2008 5
# 2 B 2014 3
# 2.1 B 2015 3
# 2.2 B 2016 3
# 3 C 2001 2
# 3.1 C 2002 2
答案 1 :(得分:1)
只是为了回顾Ananda的回答,改变
sequence(rpsInput$Contract.Term)
到
(sequence(rpsInput$Contract.Term)-1)
获得你想要的输出。
ProjectName<-c("A","B","C")
Start.Year<-c(2003,2013,2000)
Contract.Term<-c(5,3,2)
rpsInput<-data.frame(ProjectName,Start.Year,Contract.Term)
rpsData <- rpsInput[rep(rownames(rpsInput), rpsInput$Contract.Term), ]
rpsData$Start.Year <- rpsData$Start.Year + (sequence(rpsInput$Contract.Term)-1)
rpsData
# ProjectName Start.Year Contract.Term
#1 A 2003 5
#1.1 A 2004 5
#1.2 A 2005 5
#1.3 A 2006 5
#1.4 A 2007 5
#2 B 2013 3
#2.1 B 2014 3
#2.2 B 2015 3
#3 C 2000 2
#3.1 C 2001 2