str_split_fixed separate separar into from column characters cadenas r strsplit

separate - strsplit in r



¿Cómo debo dividir y retener elementos usando strsplit? (3)

Lo que hace una función strsplit en R es, hacer coincidir y eliminar una expresión regular dada para dividir el resto de la cadena en vectores.

>strsplit("abc123def", "[0-9]+") [[1]] [1] "abc" "" "" "def"

Pero, ¿cómo debo dividir la cadena de la misma manera utilizando expresiones regulares, pero también conservar las coincidencias? Necesito algo como lo siguiente.

>FUNCTION("abc123def", "[0-9]+") [[1]] [1] "abc" "123" "def"

El uso de strapply ("abc123def", "[0-9] + | [az] +") funciona aquí, pero ¿qué sucede si el resto de la cadena que no sea la coincidencia no puede ser capturado por una expresión regular?


Fundamentalmente, me parece que lo que quieres es no dividir en [0-9]+ sino dividir en la transición entre [0-9]+ y todo lo demás. En su cadena, esa transición no es preexistente. Para insertarlo, podría preprocesar con gsub y referencias gsub :

test <- "abc123def" strsplit( gsub("([0-9]+)","~//1~",test), "~" ) [[1]] [1] "abc" "123" "def"


Podrías usar aserciones de lookaround.

> test <- "abc123def" > strsplit(test, "(?<=//D)(?=//d)|(?<=//d)(?=//D)", perl=T) [[1]] [1] "abc" "123" "def"


Puede utilizar strapply desde el paquete gsubfn.

test <- "abc123def" strapply(X=test, pattern="([^[:digit:]]*)(//d+)(.+)", FUN=c, simplify=FALSE) [[1]] [1] "abc" "123" "def"