Foro de debate

Transponer filas en Columnas en R

 
Imagen de Esteban Murillo Urrego
Transponer filas en Columnas en R
de Esteban Murillo Urrego - viernes, 14 de junio de 2019, 18:39
 

Buenos días Comunidad

Tengo un archivo de texto que se ve de la siguiente manera:

en este Link encuentran el archivo: Archivo de Ejemplo


*** Save 15.11.2018 07:57:22

*** User: Ingeniera1

*** Version: 2018i

*** No conflicts


*** Autosave 15.11.2018 09:03:48

*** User: Ingeniera1

*** Version: 2018i

*** No conflicts

y necesito transponer cada bloque como un registro en una tabla de la siguiente manera:

Operación Time Stamp Usuario Version Estado
Save 15.11.2018 07:57:22 Ingeniera1 2018i No conflicts
Autosave 15.11.2018 09:03:48 Ingeniera1 2018i No conflicts

me gustaría hacerlo en Completamente en R 
Actualmente hago ciertos procedimientos automáticos en Excel pero me toca terminarlo en R

Les comparto la macro que uso en excel para que les de una idea, pero como les digo me toca terminarlo manualmente en excel

Macro:

Sub transponer()

    Set datos = Range("A2372:A9484").CurrentRegion

    With datos

        Areas = .Rows.Count / 4

        Set resultados = .Columns(.Columns.Count + 3).Resize(Areas, 4)

        For i = 1 To Areas

            If i = 1 Then Set fila = .Resize(4, 1)

            If i > 1 Then Set fila = fila.Rows(5).Resize(4, 1)

            resultados.Rows(i).Value = WorksheetFunction.Transpose(fila)

        Next i

        resultados.EntireColumn.AutoFit

    End With

End Sub


De antemano muchas gracias 

y si necesitan algo me escriben y de una le hacemos

cordial saludo

Imagen de Manuel Muñoz Márquez
Re: Transponer filas en Columnas en R
de Manuel Muñoz Márquez - sábado, 15 de junio de 2019, 11:41
 
Hola: He probado a descargar el fichero y el siguiente código funciona:
df <- read.csv('VigasPte10A_save_history.log', header=FALSE, stringsAsFactor=FALSE)
df <- df[,1]
m <- matrix(df, ncol=4)
m[1,]
[1] "*** Save 15.11.2018 07:57:22" "*** No conflicts"            
[3] "*** Version: 2018i"           "*** User: Ingeniera2"
Para borrar la parte que no te interesa, "**** Save", etc, puedes usar gsub justo antes de convertirlo en matrix.
Un saludo.
Imagen de Esteban Murillo Urrego
Re: Transponer filas en Columnas en R
de Esteban Murillo Urrego - sábado, 15 de junio de 2019, 19:29
 

Muchas Gracias Profesor Manuel Muños Marquez por su interés en responder

he estado ensayando su código y no me funciona bien 

 

lo que estamos obteniendo es la misma informacion pero ya  no en una sola columna sino en 4. 

eso no es la solución que busco

lo que busco mas orientado esto:

datos iniciales

*** Save 15.11.2018 07:57:22

*** User: Ingeniera1

*** Version: 2018i

*** No conflicts


*** Autosave 15.11.2018 09:03:48

*** User: Ingeniera1

*** Version: 2018i

*** No conflicts

Datos Finales


*** Save 15.11.2018 07:57:22 *** User: Ingeniera1 *** Version: 2018i *** No conflicts
*** Autosave 15.11.2018 09:03:48 *** User: Ingeniera1 *** Version: 2018i
*** No conflicts

la función gsub no funciona cuando le digo que me reemplace  "***" por "" me genera un error y me dice que la expresión regular no esta bien


muchas gracias por el interés 
ninguna respuesta es mala 

depronto no me hice entender bien

le agradezco mucho

cordial saludo



Imagen de Manuel Muñoz Márquez
Re: Transponer filas en Columnas en R
de Manuel Muñoz Márquez - sábado, 15 de junio de 2019, 20:50
 

Buenas:

La función gsub, interpreta * como un comodín y ve una expresión mal formada. Eso creo que se resuelve usando el argumento fixed=TRUE en la llamada a gsub.

Con respecto a las columnas, entiendo que lo que quieres es cinco columnas: Operación, timestamp, usuario, version, resultado. ¿No?

Para conseguir esto hay que trabajar un poco más.

Una idea es:

  1. A partir del fichero usando paste construir una única cadena usando la instrucción paste.
  2. Usando gsub reemplazar "*** " por ","
  3. Usando gsub reemplazar "Save " por ","
  4. Hecho esto se separa la cadena en un vector usando la función strsplit
  5. Usando la técnica anterior convertir el vector en una matriz de 5 columnas
  6. De matriz se puede convertir a data.frame si se requiere
Un saludo.
Imagen de Esteban Murillo Urrego
Re: Transponer filas en Columnas en R
de Esteban Murillo Urrego - martes, 18 de junio de 2019, 18:57
 
muchas gracias por su Respuesta apreciado Profesor Muñoz.


pero aun no se como transponer ese bloque de 4 filas en un registro de 4 columnas.

no tengo ni idea de como hacer el código

muchas gracias por su interés 

Quedo atento a su respuesta 

cordial saludo

Imagen de Esteban Murillo Urrego
Re: Transponer filas en Columnas en R
de Esteban Murillo Urrego - martes, 18 de junio de 2019, 18:57
 
muchas gracias por su Respuesta apreciado Profesor Muñoz.


pero aun no se como transponer ese bloque de 4 filas en un registro de 4 columnas.

no tengo ni idea de como hacer el código

muchas gracias por su interés 

Quedo atento a su respuesta 

cordial saludo

Imagen de Manuel Muñoz Márquez
Re: Transponer filas en Columnas en R
de Manuel Muñoz Márquez - miércoles, 19 de junio de 2019, 18:16
 

Buenas,

creo que esto es lo que queréis

Un saludo

> df <- read.csv('VigasPte10A_save_history.log', header=FALSE, stringsAsFactor=FALSE)
> df <- df[,1]
> df <- gsub('*** ', ',', df, fixed=TRUE)
> df <- gsub('User: ', '', df, fixed=TRUE)
> df <- gsub('Version: ', '', df, fixed=TRUE)
> df <- gsub('Save ', 'Save,', df, fixed=TRUE)
> df <- gsub('Autosave ', 'Autosave,', df, fixed=TRUE)
> df <- paste(df, collapse='')
> m <- strsplit(df, ',')
> m <- m[[1]][-1]
> dim(m) <- c(5, length(m)/5)
> m <- t(m)
> m[1,]
[1] "Save"                "15.11.2018 07:57:22" "Ingeniera1"        
[4] "2018i"               "No conflicts"      
> ddf <- data.frame(m)
> colnames(ddf) <- c('operacion', 'fecha', 'usuario', 'version', 'resultado')
> head(ddf)
  operacion               fecha    usuario version    resultado
1      Save 15.11.2018 07:57:22 Ingeniera1   2018i No conflicts
2      Save 15.11.2018 09:03:48 Ingeniera1   2018i No conflicts
3      Save 15.11.2018 09:53:03 Ingeniera1   2018i No conflicts
4      Save 15.11.2018 09:57:03 Ingeniera1   2018i No conflicts
5  Autosave 15.11.2018 10:32:37 Ingeniera1   2018i No conflicts
6  Autosave 15.11.2018 12:01:02 Ingeniera1   2018i No conflicts
Imagen de Esteban Murillo Urrego
Re: Transponer filas en Columnas en R
de Esteban Murillo Urrego - viernes, 21 de junio de 2019, 04:08
 

Apreciado Profesor Muñoz

muchas gracias por su interés en buscar una solución a mi problema

ahora el conocimiento esta publico en este foro

el código funciona perfectamente hasta me ahorro algunos pasos adicionales en el tratamiento de los datos

le agradezco muchísimo

cordial saludo