如何解决根据另一个值重复序列
我正在处理这样设置的数据结构:
数据
structure(list(ID = c(1147L,1147L,4085L,4085L),year = c(1L,1L,2L,3L,4L,3L),term = c(1L,5L,1L),reportedFY = c(NA,NA,NA),minFY = c(2016L,2016L,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)
任何帮助将不胜感激!
解决方法
基本R
df$reportedFY <- ave(df$minFY,df$ID,FUN = function(x) rep(min(x) + 0:3,each = 3))
ID year term reportedFY minFY
1 1147 1 1 2016 2016
2 1147 1 3 2016 2016
3 1147 1 5 2016 2016
4 1147 2 1 2017 2016
5 1147 2 3 2017 2016
6 1147 2 5 2017 2016
7 1147 3 1 2018 2016
8 1147 3 3 2018 2016
9 1147 3 5 2018 2016
10 1147 4 1 2019 2016
11 1147 4 3 2019 2016
12 1147 4 5 2019 2016
13 4085 1 1 2019 2019
14 4085 1 3 2019 2019
15 4085 1 5 2019 2019
16 4085 2 1 2020 2019
17 4085 2 3 2020 2019
18 4085 2 5 2020 2019
19 4085 3 1 2021 2019
,
这应该适合您:
library(dplyr)
d <- data.frame('ID' = c(rep(1147,12),rep(4085,12)),'year' = rep(rep(1:4,each=3),2),'term' = rep(c(1,3,5),8),'reportedFY' = NA,'minFY' = c(rep(2016,rep(2019,12)))
d <- d %>% group_by(ID) %>% mutate(reportedFY = rep(seq(first(minFY),(first(minFY)+3)),each = 3))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。