подготовить фрейм данных:
df <- data.frame("Variable 1" = c(1, 1, 2, 2, 2, 3, 3, 3), "Variable 2" = unlist(strsplit("abaabaca", "")))
написать функции для проверки наличия или отсутствия последовательных повторений:
any.consecutive.p <- function(v) {
for (i in 1:(length(v) - 1)) {
if (v[i] == v[i + 1]) {
return(TRUE)
}
}
return(FALSE)
}
any.consecutive.in.col.p <- function(df, col) {
any.consecutive.p(df[, col])
}
any.consecutive.p возвращает TRUE, если он находит первый последовательный повторв векторе (v).any.consecutive.in.col.p () ищет последовательные повторения в столбце фрейма данных.
разделить фрейм данных по значениям Variable.1
df.l <- split(df, df$Variable.1)
df.l
$`1`
Variable.1 Variable.2
1 1 a
2 1 b
$`2`
Variable.1 Variable.2
3 2 a
4 2 a
5 2 b
$`3`
Variable.1 Variable.2
6 3 a
7 3 c
8 3 a
Наконец перейдитеэтот список data.frame и тест для каждого фрейма данных, если он содержит последовательные дубликаты в столбце Variable.2.Если найдено, не собирайте его.Свяжите собранные кадры данных по строкам.
Reduce(rbind, lapply(df.l, function(df) if(!any.consecutive.in.col.p(df, "Variable.2")) {df}))
Variable.1 Variable.2
1 1 a
2 1 b
6 3 a
7 3 c
8 3 a