Как определить наиболее повторяющийся символ в строке из заданной строки в R - PullRequest
2 голосов
/ 01 апреля 2020

У меня есть проблема, что я не имею ни малейшего представления о том, как подойти. Представьте, что у вас есть следующая строка "aabccccdeddaaa". Программа должна вернуть наиболее повторяющийся последовательный символ, и сколько раз он повторяется, можно подумать, что это «a», потому что он повторяется 5 раз в строке, но это не то, что я ищу. Правильный ответ на мою проблему - «c», потому что, хотя он просто повторяется 4 раза, он повторяет эти 4 раза подряд, в то время как «а» повторяется только 3 раза подряд.

Не найдено решение хотя, только для некоторого руководства о том, как начать.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2020

Просто пошел вперед и сделал это. Вам нужно использовать комбинацию из нескольких функций. Основным является rle. Он считает последовательные значения. Остальное - просто собрать несколько базовых c функций для извлечения необходимых вам элементов rle.

# Which letter is repeated most
rle(unlist(strsplit("aabccccdeddaaa", "")))$values[which.max(rle(unlist(strsplit("aabccccdeddaaa", "")))$lengths)]
[1] "c"

# How many times it's repeated
max(rle(unlist(strsplit("aabccccdeddaaa", "")))$lengths)
[1] 4
2 голосов
/ 01 апреля 2020

Один из подходов заключается в разделении входной строки в любой точке, где предыдущие и последующие буквы не совпадают. Затем отсортируйте результирующий вектор частей по убыванию, чтобы найти букву / термин, который выглядел наиболее:

x <- "aabccccdeddaaa"
parts <- strsplit(x, "(?<=(.))(?!\\1)", perl=TRUE)[[1]]
parts[order(-nchar(parts), parts)][1]

[1] "cccc"

Для справки приведем вектор терминов:

parts
[1] "aa"   "b"    "cccc" "d"    "e"    "dd"   "aaa"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...