Подсчет последовательных вхождений элемента в строку - PullRequest
0 голосов
/ 14 ноября 2018

Вчера я задавал подобный вопрос Считать каждый следующий вхождение строки в подстроку сейчас я борюсь с другим:

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 и несколькими другими функциями и не смог преодолеть мою проблему.

Чтобы прояснить ситуацию: во фрейме данных есть несколько столбцов, и в одном из них хранится последовательность слов.

1 Ответ

0 голосов
/ 14 ноября 2018

Чтобы сложить кусочки: вот комбинация моего комментария к вашему предыдущему вопросу и (части) моего ответа здесь: Подсчет последовательных ИСТИННЫХ значений в каждом блоке отдельно . Используются вспомогательные функции 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...