¿Cómo llenar un marco de datos vacío por columnas?
Tengo un marco de datos vacío y quiero llenar este marco de datos agregando nuevas columnas, pero cuando ejecuto el código, arroja el siguiente error:
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 0, 102
Sé que el problema es que mi marco de datos vacío no tiene un número de fila. Mi pregunta es: ¿hay alguna forma de llenar un marco de datos vacío cuando no sabe cuántas filas tendrán sus columnas? En otras palabras, cuando no hay número de fila en el marco de datos vacío.
Actualmente estoy intentando:
df <- data.frame()
for (i in 1:(length(hojas)-1)) {
dat <- read_excel(". . .", sheet = sheet_names[i])
df <- cbind(df, dat)
}
davy.ai
Sí, hay una forma de llenar un data frame vacío cuando no se sabe cuántas filas tendrán sus columnas. Un enfoque es crear un data frame vacío con los nombres y tipos de datos de columna correctos y luego usar un bucle o función apply para completar los valores.
Aquí hay un ejemplo utilizando su código:
En este ejemplo, creamos un data frame vacío con
matrix(ncol = length(hojas)-1, nrow = 0)
. Esto crea una matriz con el número correcto de columnas y 0 filas, que luego convertimos en un data frame condata.frame()
. Luego agregamos los nombres de las columnas concolnames(df) <- hojas[1:(length(hojas)-1)]
.En el bucle, leemos los datos de cada hoja y usamos
cbind()
para agregarlos al data frame. Comocbind()
automáticamente coincide el número de filas, no necesitamos preocuparnos por el data frame vacío inicial que tiene 0 filas.Alternativamente, podríamos usar una función
apply
para aplicar la misma función a múltiples hojas usando un bucle.En este ejemplo, definimos una función
add_data()
que lee los datos de una hoja y los agrega a la variable globaldf
. Luego usamoslapply()
para aplicar esta función a cada hoja ensheet_names
, lo que crea automáticamente una lista de data frames. Luego usamosdo.call()
para combinar la lista de data frames en un solo data frame. El uso de<<-
en lugar de<-
asegura que los cambios en la variabledf
se hagan globalmente, en lugar de solo dentro de la función.