Başka bir değere göre yinelenen sıra
Aug 18 2020
Şu şekilde ayarlanmış bir veri yapısı ile uğraşıyorum:
Veri
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
Her kimlik (yaklaşık ~ 9000 var, her biri 12 kez tekrarlayın, her yıl 3 kez tekrarlayın. Yapmaya çalıştığım şey, minFY'ye göre her kimlik için bir diziyi tekrarlamaktır. Bu nedenle, ID 1147'nin bir dizisi olacaktır. Her yıl 3 kez tekrarlanan 2016,2017,2018,2019. 4085 ise 2019,2020,2021,2022 dizisinin her biri 3 kez tekrarlanacaktır.
Bu çizgide bir şey kullanmaya çalışıyorum, ki bu açıkçası işe yaramıyor:
prog_structure2$reportedFY <- rep(c(minFY, minFY+1, minFY+2, minFY+3), time=9306, each=3)
Herhangi bir yardım memnuniyetle karşılanacaktır!
Yanıtlar
1 YuriySaraykin Aug 18 2020 at 22:37
taban 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
VPMancy Aug 18 2020 at 22:00
Bu sizin için çalışmalıdır:
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, 12), rep(2019,12)))
d <- d %>% group_by(ID) %>% mutate(reportedFY = rep(seq(first(minFY),(first(minFY)+3)),each = 3))
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'