【发布时间】:2020-08-18 23:37:43
【问题描述】:
我正在处理这样设置的数据结构:
数据
structure(list(ID = c(1147L, 1147L, 1147L, 1147L, 1147L, 1147L,
1147L, 1147L, 1147L, 1147L, 1147L, 1147L, 4085L, 4085L, 4085L,
4085L, 4085L, 4085L, 4085L), year = c(1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L, 3L, 4L, 4L, 4L, 1L, 1L, 1L, 2L, 2L, 2L, 3L), term = c(1L,
3L, 5L, 1L, 3L, 5L, 1L, 3L, 5L, 1L, 3L, 5L, 1L, 3L, 5L, 1L, 3L,
5L, 1L), reportedFY = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA), minFY = c(2016L, 2016L,
2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L, 2016L,
2016L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L, 2019L)), class = "data.frame", row.names = c(NA,
-19L))
ID year term reportedFY minFY
1147 1 1 NA 2016
1147 1 3 NA 2016
1147 1 5 NA 2016
1147 2 1 NA 2016
1147 2 3 NA 2016
1147 2 5 NA 2016
1147 3 1 NA 2016
1147 3 3 NA 2016
1147 3 5 NA 2016
1147 4 1 NA 2016
1147 4 3 NA 2016
1147 4 5 NA 2016
4085 1 1 NA 2019
4085 1 3 NA 2019
4085 1 5 NA 2019
4085 2 1 NA 2019
4085 2 3 NA 2019
4085 2 5 NA 2019
4085 3 1 NA 2019
每个 ID(其中大约有 9000 个,每个重复 12 次,每年重复 3 次。我要做的是根据 minFY 为每个 ID 重复一个序列。所以 ID 1147 会有2016,2017,2018,2019 的序列,其中每年重复 3 次。而 4085 将具有序列 2019,2020,2021,2022,每个重复 3 次。
我一直在尝试使用与此类似的东西,但这显然不起作用:
prog_structure2$reportedFY <- rep(c(minFY, minFY+1, minFY+2, minFY+3), time=9306, each=3)
任何帮助将不胜感激!
【问题讨论】:
-
您可以尝试
expand.grid(ID = c(1147, 4085), year = 1:3, term = c(1, 3, 5), reportedFY = NA, minFY = 0)(将 ID 替换为 9306 ID),然后将报告的FY 设置为 year 并为每个 ID 添加适当的年数。 -
也许可以试试:
with(prog_structure2, ave(minFY, ID, FUN=function(x) seq(x[1], length.out=4))) -
或
i <- seq(1, by=12, length.out=ceiling(nrow(prog_structure2)/12)); c(apply(sapply(prog_structure2$minFY[i], seq, length.out=4), 2, rep, 3))