Я использую следующий код в R, и он работает очень хорошо. Точнее, я каждый раз сравниваю cluster_id с последним cluster_ref , чтобы увидеть, когда они различаются на 2 периода подряд (данные организованы по fund_numbers). Однако хотелось бы адаптировать его к 5 периодам. Но заставить его работать невозможно. Вы знаете, как я могу изменить этот код, чтобы решить мою проблему?
get_output <- function(mon, ref){
exp <- !is.na(Cluster_id) & !map2_lgl(Cluster_id, last(Cluster_ref), identical)
as.integer(exp & lag(exp, default = FALSE))
}
df %>%
arrange(Fund_number, rolling_window) %>%
group_by(Fund_number) %>%
mutate(Deviation = get_output(Cluster_id, Cluster_ref)) %>%
ungroup()
rolling_window Fund_number Cluster_id Cluster_ref Expected_output
1 1 10 10 0
2 1 10 10 0
3 1 8 9 0
4 1 8 8 0
5 1 7 7 0
6 1 8 8 0
7 1 8 NA 1
8 1 7 NA 1
9 1 7 10 1
10 1 10 10 0
1 2 NA NA 0
2 2 NA 3 0
3 2 3 3 0
4 2 2 5 0
5 2 2 NA 0
6 2 2 4 0
7 2 2 4 1
8 2 5 5 0
9 2 4 5 0
10 2 3 5 0
Это то, что я хочу. Как видите, данные организованы по номеру фонда. Затем я смотрю на последний cluster_ref для каждого фонда (то есть каждые 8 строк) и сравниваю его с каждым cluster_id для каждого фонда. Как только он отличается по крайней мере 5 периодов подряд, у меня будет 1, если не 0. Итак, для каждого фонда я сравниваю 8-й cluster_ref и cluster_id строк с 1 по 8.
Код выше делает это но с 2 временными интервалами.
Большое спасибо,
Ван ie