Прерывание строки в вектор фиксированных элементов символа ширины

У меня есть объект, содержащий текстовую строку:

x <- "xxyyxyxy"

и я хочу разделить это на вектор с каждым элементом, содержащим две буквы:

[1] "xx" "yy" "xy" "xy"

Это походит strsplit должен быть мой билет, но так как у меня нет нечто регулярного выражения, я не могу выяснить, как заставить эту функцию нарубить строку в блоки путем, я хочу это. Как я должен сделать это?

53
задан Henrik 8 June 2018 в 23:08
поделиться

5 ответов

Использование substring - лучший подход:

substring(x, seq(1, nchar(x), 2), seq(2, nchar(x), 2))

Но вот решение с помощью plyr:

library("plyr")
laply(seq(1, nchar(x), 2), function(i) substr(x, i, i+1))
58
ответ дан 7 November 2019 в 08:26
поделиться

Как насчет

strsplit(gsub("([[:alnum:]]{2})", "\\1 ", x), " ")[[1]]

В основном, добавьте разделитель (здесь " ") и затем используйте strsplit

20
ответ дан 7 November 2019 в 08:26
поделиться

strsplit будет проблематичным, посмотрите на такое регулярное выражение

strsplit(z, '[[:alnum:]]{2}')  

, оно будет разделено в правых точках, но ничего не останется.

Вы можете использовать подстроку и друзья

z <- 'xxyyxyxy'  
idx <- 1:nchar(z)  
odds <- idx[(idx %% 2) == 1]  
evens <- idx[(idx %% 2) == 0]  
substring(z, odds, evens)  
10
ответ дан 7 November 2019 в 08:26
поделиться

Вот один способ, но без использования регулярного выражения:

a <- "xxyyxyxy"
n <- 2
sapply(seq(1,nchar(a),by=n), function(x) substr(a, x, x+n-1))
8
ответ дан 7 November 2019 в 08:26
поделиться

Полный взлом, JD, но он справляется

x <- "xxyyxyxy"
c<-strsplit(x,"")[[1]]
sapply(seq(2,nchar(x),by=2),function(y) paste(c[y-1],c[y],sep=""))
[1] "xx" "yy" "xy" "xy"
6
ответ дан 7 November 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: