Разбивает строку на подстроки заданной длины с остатком
учитывая строку, такую как:
text <- "abcdefghijklmnopqrstuvwxyz"
Я хотел бы нарезать строку на подстроки, например length 10, и сохранить остаток:
"abcdefghij"
"klmnopqrst"
"uvwxyz"
все методы, которые я знаю для создания подстрок, не дадут мне оставшуюся подстроку с 6 символами. Я пробовал ответы из предыдущих подобных вопросов, таких как:
> substring(text, seq(1, nchar(text), 10), seq(10, nchar(text), 10))
[1] "abcdefghij" "klmnopqrst" ""
любые советы о том, как получить все подстроки желаемой длины и любые оставшиеся строки, будут много оцененный.
3 ответов
векторы, которые вы используете для first
и last
аргументы substring
может превышать количество символов в строке без ошибок/предупреждения/проблемы. Так что вы можете сделать
text <- "abcdefghijklmnopqrstuvwxyz"
sq <- seq.int(to = nchar(text), by = 10)
substring(text, sq, sq + 9)
# [1] "abcdefghij" "klmnopqrst" "uvwxyz"
попробовать
strsplit(text, '(?<=.{10})', perl=TRUE)[[1]]
#[1] "abcdefghij" "klmnopqrst" "uvwxyz"
или вы можете использовать library(stringi)
для более быстрого подхода
library(stringi)
stri_extract_all_regex(text, '.{1,10}')[[1]]
#[1] "abcdefghij" "klmnopqrst" "uvwxyz"
вот способ, с помощью strapplyc
С использованием довольно простого регулярного выражения. Это работает, потому что .{1,10}
всегда соответствует самой длинной строке, которая не превышает 10 символов:
library(gsubfn)
strapplyc(text, ".{1,10}", simplify = c)
даем:
[1] "abcdefghij" "klmnopqrst" "uvwxyz"
визуализация это регулярное выражение достаточно просто, что оно действительно не требует визуализации, но в любом случае:
.{1,10}