studio - ¿Cómo agregar filas para vaciar marcos de datos con encabezado en R?
seleccionar filas en r (6)
Acabo de obtener una forma más simple de hacerlo ... de la siguiente manera
compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[nrow(compData)+1, ] <- c(5, 443)
compData
Posible duplicado:
R: perder nombres de columna al agregar filas a un marco de datos vacío
Creé un dataframe vacío con nombres de columna solo de la siguiente manera
> compData <- data.frame(A= numeric(0), B= numeric(0))
> compData
[1] A B
<0 rows> (or 0-length row.names)
> compData <- rbind(compData,c(5,443))
> compData
X5 X443
1 5 443
en lo anterior después de agregar una fila, los nombres de las columnas se cambian. ¿Cómo puedo agregar nuevos datos de fila a data-frame?
Agregar a un data.frame
fila data.frame
actuará de manera diferente a la adición a un data.frame
que ya contiene filas
De ?rbind
El método de marco de datos rbind primero descarta todos los argumentos de columna cero y de fila cero. (Si eso no deja ninguno, devuelve el primer argumento con columnas; de lo contrario, un marco de datos de columna cero de fila cero). A continuación, toma las clases de las columnas del primer marco de datos y las coincide con las columnas por nombre (en lugar de por posición) . Los factores tienen sus niveles expandidos según sea necesario (en el orden de los niveles de los conjuntos encontrados) y el resultado es un factor ordenado si y solo si todos los componentes fueran factores ordenados. (El último punto difiere de S-PLUS). Las categorías antiguas (vectores enteros con niveles) se promueven a factores.
Tienes un número de opciones --
el más directo
compData[1, ] <- c(5, 443)
más complicado
O puede forzar c(5,433)
a una lista o data.frame
rbind(compData,setNames(as.list(c(5,443)), names(compData)))
o
rbind(compData,do.call(data.frame,setNames(as.list(c(5,443)), names(compData))))
Pero en este caso también podrías hacer
do.call(data.frame,setNames(as.list(c(5,443)), names(compData)))
opción data.table
Puede usar la función rbindlist
la data.table
rbindlist
que realiza menos comprobaciones y por lo tanto conserva los nombres de la primera data.frame
library(data.table)
rbindlist(list(compData, as.list(c(5,443))
Puede asignar al marco de datos por índice:
compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[1, ] <- c(5, 443)
compData
Lo que da:
> compData <- data.frame(A= numeric(0), B= numeric(0))
> compData
[1] A B
<0 rows> (or 0-length row.names)
> compData[1, ] <- c(5, 443)
> compData
A B
1 5 443
Puede usar la structure
la función con el argumento .Names
:
compData <- structure(rbind(compData,c(5,443)), .Names = names(compData))
# A B
#1 5 443
Si tiene datos del mismo tipo *, puede hacer lo siguiente:
- Convierte el marco de datos real a una matriz.
as.matrix(compData)
- Agregue la nueva fila hasta el final.
rbind(as.matrix(compData), c(5,443))
- Convierte la matriz a un marco de datos.
as.data.frame(rbind(as.matrix(compData), c(5,443)))
En breve:
compData <- as.data.frame(rbind(as.matrix(compData), c(5,443)))
* Si tiene datos del mismo tipo, es posible que desee mantenerlos en una matriz.
Colnames <- names(compData)
compData <- rbind(compData, c(5, 443))
names(compData) <- Colnames