Другое решение base
будет использовать rle
.
Если вы хотите создать подкадр данных на основе критериев, вы можете использовать lengths
. В противном случае, если вам нужно только подмножество столбца x
, мы должны извлечь значения из rle
. См. Ниже;
df[cumsum(rle(df$x)$lengths), ] # dataframe subset
# t x
# 1 1 5
# 2 2 7
# 3 3 8
# 4 4 9
# 8 8 5
# 9 9 4
# 10 10 3
rle(df$x)$values # vector of values
# [1] 5 7 8 9 5 4 3
Или с использованием data.table
:
library(data.table)
setDT(df_large)[, rn :=1:.N, by = rleid(x)][rn == 1, .(t, x)]
# t x
# 1: 1 5
# 2: 2 7
# 3: 3 8
# 4: 4 9
# 5: 5 5
# 6: 9 4
# 7: 10 3