es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo separar columnas delimitadas por “.” con tidyR

Creo que estoy pasando por alto algo importante. Cada vez que intento separar una columna que tiene delimitador “.”, falla.

¿Alguien tiene alguna idea de por qué?

library(tidyverse)
library(reprex)

check=data.frame(time=c("1.2","1.3"),light=c("A","B"))
check

>   time light
> 1  1.2     A
> 2  1.3     B

check %>% 
  tidyr::separate(time,c('time2',"node"),sep='.')

> Warning: Expected 2 pieces. Additional pieces discarded in 2 rows [1, 2].
>   time2 node light
> 1             A
> 2             B

Creado el 06-01-2022 con el paquete reprex (v2.0.1)

Para cualquier otro delimitador, la función separate funciona bien, por ejemplo:

library(tidyverse)
library(reprex)

check=data.frame(time=c("1<em>2","1</em>3"),light=c("A","B"))
check

>   time light
> 1  1_2     A
> 2  1_3     B

check %>% 
  tidyr::separate(time,c('time2',"node"),sep='_')

>   time2 node light
> 1     1    2     A
> 2     1    3     B

Creado el 06-01-2022 con el paquete reprex (v2.0.1)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el argumento separator en la función tidyr::separate(). En este caso, el separador debe ser especificado como sep = “\.” en lugar de sep = “.” ya que “.” tiene un significado especial en las expresiones regulares. Por lo tanto, el código debería ser actualizado de la siguiente manera:

    library(tidyverse)
    library(reprex)
    
    check=data.frame(time=c("1.2","1.3"),light=c("A","B"))
    check %>% 
      tidyr::separate(time,c('time2',"node"),sep='\\.')
    #>   time2 node light
    #> 1     1    2     A
    #> 2     1    3     B
    

    Con esta modificación, el código debería funcionar como se espera.

Comments are closed.