我想使用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
。有什么建议吗?
感谢。
答案 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)]