Otra alternativa es el uso de captura de sub-expresiones con las funciones de expresión regular regmatches
y regexec
.
# the original example
x <- 'hello stackoverflow'
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', x))
Esto devuelve toda la cadena, el primer carácter, y el "estallar" número en una lista de longitud 1.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
lo que equivale a list(c(x, substr(x, 1, 1), substr(x, 2, nchar(x))))
.Es decir, contiene el conjunto súper de los elementos deseados, así como la cadena completa.
Adición sapply
permitirá que este método funcione para un vector de caracteres de longitud> 1.
# a slightly more interesting example
xx <- c('hello stackoverflow', 'right back', 'at yah')
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', xx))
Esto devuelve una lista con la cadena completa emparejado como el primer elemento y las subexpresiones coincidentes capturados por ()
como los siguientes elementos. Por lo tanto, en la expresión regular '(^.)(.*)'
, (^.)
coincide con el primer carácter y (.*)
coincide con los caracteres restantes.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
[[2]]
[1] "right back" "r" "ight back"
[[3]]
[1] "at yah" "a" "t yah"
Ahora, podemos usar el método de confianza sapply
+ [
para sacar las subseries deseados.
myFirstStrings <- sapply(myStrings, "[", 2)
myFirstStrings
[1] "h" "r" "a"
mySecondStrings <- sapply(myStrings, "[", 3)
mySecondStrings
[1] "ello stackoverflow" "ight back" "t yah"
Este es un truco muy bueno, pero creo que se pierde la pregunta. – pedrosaurio
Tendrá que seguir explicando, ya que puede producir el mismo resultado que las otras respuestas. Vea el último bloque de código que usa 'sapply' para la extracción. "hacer estallar" el primer carácter, como se especifica en la pregunta, es una cuestión de repetir este proceso en el vector resultante (mySecondStrings). – lmo
Claro que funciona con la explicación adicional que acaba de agregar, pero aún así me resulta más complicada de lo que debería. – pedrosaurio