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.

Conservar los nombres de fila al utilizar setDT()

Tengo un marco de datos donde:

df <- data.frame(row_id = c(100, 101, 102, 103, 104, 105, 106, 107, 108, 109),
row_id2 = c(1000,2000,3000,4000,5000,6000,7000,8000,9000,10000),
col1 = c(1,0,1,1,1,0,0,1,1,0),
col2 = c(1,1,1,0,0,1,1,1,0,0),
col3 = c(0,0,1,0,0,1,1,1,1,0),
col4 = c(1,1,1,0,0,1,0,1,1,1),
col5 = c(1,1,1,0,1,0,1,0,0,1))

Transpongo la tabla y uso “rownames” para obtener:

library(data.table)
df_tr<-transpose(df)
rownames(df_tr)<-colnames(df)

| | V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 |
|row_id | 100 101 102 103 104 105 106 107 108 109 |
|row_id2| 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000|
|col1 | 1 0 1 1 1 0 0 1 1 0 |
|col2 | 1 1 1 0 0 1 1 1 0 0 |
|col3 | 0 0 1 0 0 1 1 1 1 0 |
|col4 | 1 1 1 0 0 1 0 1 1 1 |
|col5 | 1 1 1 0 1 0 1 0 0 1 |

Más tarde necesito usar “setDT(df_tr)” para poder usar “sapply()”, pero al hacerlo, pierdo mis “rownames”.

¿Hay alguna manera de mantener mis “rownames” usando “setDT()”? Mi objetivo final es conservar mis “rownames” después de convertirlo en un data.table para que mi “df_tr” tenga “rownames” cuando use “sapply()”.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes mantener tus rownames después de convertir a un data.table usando setDT() al establecerlos como una nueva columna antes de llamar a setDT(). Aquí tienes un ejemplo:

    “`{r}
    library(data.table)

    df_tr <- transpose(df)
    df_tr$name <- colnames(df_tr) # crear nueva columna con los nombres de las filas
    rownames(df_tr) <- NULL # eliminar los antiguos rownames
    setDT(df_tr) # convertir a data.table


    Ahora tu data.table `df_tr` tiene una nueva columna llamada `name` que contiene tus rownames originales. Puedes usar esta columna en lugar de `rownames` con `sapply()` u otras funciones que requieran rownames. ```{r} sapply(df_tr$name, nchar) # ejemplo usando sapply()

Comments are closed.