У меня есть объект, содержащий текстовую строку:
x <- "xxyyxyxy"
и я хочу разделить это на вектор с каждым элементом, содержащим две буквы:
[1] "xx" "yy" "xy" "xy"
Это походит strsplit
должен быть мой билет, но так как у меня нет нечто регулярного выражения, я не могу выяснить, как заставить эту функцию нарубить строку в блоки путем, я хочу это. Как я должен сделать это?
Использование 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))
Как насчет
strsplit(gsub("([[:alnum:]]{2})", "\\1 ", x), " ")[[1]]
В основном, добавьте разделитель (здесь " ") и затем используйте strsplit
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)
Вот один способ, но без использования регулярного выражения:
a <- "xxyyxyxy"
n <- 2
sapply(seq(1,nchar(a),by=n), function(x) substr(a, x, x+n-1))
Полный взлом, 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"