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.

convertir lista en un dataframe sin columnas únicas

Tengo este bucle para generar algunos valores

for (j in 1:2) {
table <- rep(data.frame(
matrix(c(letters[1:2],
sample(c(rep(1,100),0), size = 1),
sample(c(rep(0,100),1), size = 1)), ncol = 2) ), j)
}

Me gustaría obtener esta salida de esta manera

X1 X2
a  1
b  0
a  1
b  1

Para obtener una tabla de letras con una columna y números en la segunda columna:

He intentado

do.call(rbind, table)
data.frame(matrix(unlist(table), nrow=length(table), byrow=TRUE))

Pero no puedo obtener los valores en la columna derecha de la tabla de datos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada, podemos modificar el bucle de la siguiente manera:

    # Inicializar una lista para almacenar las tablas
    table_list <- list()
    
    for (j in 1:2)  {
      # Generar una tabla con letras y números aleatorios
      table <- data.frame(X1 = rep(letters[1:2], each = 2), X2 = sample(c(rep(1, 100), 0), size = 2), X3 = sample(c(rep(0, 100), 1), size = 2))
    
      # Agregar la tabla a la lista
      table_list[[j]] <- table[, -3] # Eliminar la tercera columna con los números aleatorios
    }
    
    # Combinar las tablas en la lista en un solo datatable
    result <- rbindlist(table_list)
    

    Aquí, primero inicializamos una lista vacía table_list para almacenar las tablas individuales. Luego, dentro del bucle, generamos una tabla con tres columnas: la primera columna tiene letras repetidas y las dos siguientes columnas tienen números aleatorios. Almacenamos esta tabla en el objeto table. Luego, eliminamos la tercera columna con números aleatorios utilizando table[, -3] y agregamos la tabla resultante a table_list.

    Finalmente, combinamos todas las tablas en table_list en un solo datatable utilizando rbindlist del paquete data.table.

    El datatable resultante result debería tener dos columnas, con las letras en la primera columna y los números aleatorios en la segunda columna.

Comments are closed.