R使用ifelse复制

时间:2017-04-20 07:45:52

标签: r if-statement data.table data-manipulation 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。有什么建议吗? 感谢。

1 个答案:

答案 0 :(得分:4)

您可以根据条件创建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)]