У меня есть следующий кадр данных:Использование лаг() в dplyr не работает, как ожидалось
col1<-c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
col2<-c(1,2,3,44,1,1,2,3,44,44,1,2,44,1,44)
df<-data.frame(col1,col2)
Я пытаюсь группе col1 записей, и найти, для каждой группы из col1, значения col2, которые являются равным 44 и сразу же следует запись меньшего размера (< 44) и FLAG такие записи в новой колонке.
Однако этот код не кажется, работает:
df %>% group_by(col1) %>% mutate(FLAG=(col2==44 & lead(col2,1)<44))
col1 col2 FLAG
<dbl> <dbl> <lgl>
1 1 1 FALSE
2 1 2 FALSE
3 1 3 FALSE
4 1 44 TRUE
5 1 1 FALSE
6 2 1 FALSE
7 2 2 FALSE
8 2 3 FALSE
9 2 44 FALSE
10 2 44 TRUE
11 3 1 FALSE
12 3 2 FALSE
13 3 44 TRUE
14 3 1 FALSE
15 3 44 NA
В частности, вход 10 должно быть FALSE, так как он не имеет никаких записей < 44 в той же группировке непосредственно после него. Любые предложения о том, как писать код, который работает в целом, делать то, что я хочу?
я NA в строке 10, когда я запускаю свой код (который является ожидаемым поведением). – eipi10
Я этого не делаю. Ты уверен? Я просто дважды проверял – user85727
Не знаю, почему мой компьютер дает разные результаты. – user85727