Повторять строки в наборе данных на основе столбца, но увеличивать строки

У меня есть набор данных, который имеет название проекта, год начала и срок контракта. Мне нужно развить этот набор данных во временные ряды. Например, одна строка в моем наборе данных: Проект 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), ]

Но это повторяет только каждый проект по количеству в сроке контракта. Я не могу сделать это, чтобы увеличить годы.

Заранее спасибо!

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

Просто чтобы вернуться к ответу Ананды, измени

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
Другие вопросы по тегам