Вчера я задавал подобный вопрос Считать каждый следующий вхождение строки в подстроку сейчас я борюсь с другим:
apple.a > banana.b > banana.b > carrot-c > banana.b > apple.a > carrot-c > banana.b > apple.a
Чего я хочу добиться, так это проверять последовательные события, поэтому результат будет
apple.a1 > banana.b1 > banana.b2 > carrot-c1 > banana.b1 > apple.a1 > carrot-c1 > banana.b1 > apple.a1
Я уже пробовал несколько решений:
Подсчет последовательных значений ИСТИНА в каждом блоке отдельно
Подсчет количества вхождений значения в R
R: подсчет последовательных вхождений значений в одном столбце
перечислить несколько из них, но, похоже, ни один из них не помог мне, и я не смог достичь желаемых результатов. Я пытался объединить strsplit с unlist, sequence, rle и несколькими другими функциями и не смог преодолеть мою проблему.
strsplit
unlist
sequence
rle
Чтобы прояснить ситуацию: во фрейме данных есть несколько столбцов, и в одном из них хранится последовательность слов.
Чтобы сложить кусочки: вот комбинация моего комментария к вашему предыдущему вопросу и (части) моего ответа здесь: Подсчет последовательных ИСТИННЫХ значений в каждом блоке отдельно . Используются вспомогательные функции rleid и rowid из пакета data.table.
rleid
rowid
data.table
Игрушечные данные с двумя нитями разной длины:
s <- c("a > a > b > b > b > a > b > b", "c > c > b > b > b > c > c") library(data.table) lapply(strsplit(s, " > "), function(x) paste0(x, rowid(rleid(x)), collapse = " > ")) # [[1]] # [1] "a1 > a2 > b1 > b2 > b3 > a1 > b1 > b2" # # [[2]] # [1] "c1 > c2 > b1 > b2 > b3 > c1 > c2"