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