R 使用 ifelse 进行复制

R use ifelse to replicate

我想使用 ifelse 来复制我的数据。
问题是如何使用 ifelse 复制具有不同条件的不同行。或者也许还有其他解决方案。 数据在这里:

type     Time          value
A        2015-01-01    100
A        2016-05-01    200
B        2015-12-01    150
B        2016-12-01    300

我想要的结果是这样的:

type     Time          value
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2015-01-01    100
A        2016-05-01    200
A        2016-05-01    200
A        2016-05-01    200
A        2016-05-01    200
A        2016-05-01    200
A        2016-05-01    200
A        2016-05-01    200
A        2016-05-01    200
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150
B        2015-12-01    150    
B        2016-12-01    300

我的代码:

library(readxl)
library(lubridate)
library(data.table)
data <- read_excel("data.xlsx")
data <- as.data.table(data)
data[,Time:=as.Date(Time,"%Y/%m/%d")]
result <- data[ifelse(year(Time)==2016,rep(1:.N,12-month(Time)+1),rep(1:.N,13))]

但是和我实际想要的不一样
我认为问题是我无法使用 .N。有什么建议吗? 谢谢。

您可以根据您的条件创建一个 reps 列,这将允许我们重复每一行乘以这个新变量中的值:

library(data.table)
data[,reps:=ifelse(year(Time)==2016, 12-month(Time)+1, 13)][rep(1:.N,reps)]

或没有ifelse():

data[,reps := 13][year(Time)==2016, reps := 11-month(Time)][rep(1:.N, reps)]