Мы можем сделать это векторизованным способом несколькими способами
1) base R
df$changed <- with(df, c(FALSE, c[-1] != c[-length(c)]))
Или с diff
, если это число c
with(df, c(FALSE, diff(c) != 0))
2) с dplyr
library(dplyr)
df %>%
mutate(changed = c(FALSE, diff(c) != 0))
Или, если это не число c
df %>%
mutate(changed = c(FALSE, c[-1] != c[-n()]))
3) с data.table
library(data.table)
setDT(df)[, changed := c(FALSE, diff(c) != 0)]
или
setDT(df)[, changed := c(FALSE, c[-1] != c[-.N])]
data
df <- data.frame(c = c(1, 3, 3, 2, 1, 3, 4))