tablas studio seleccionar filtrar filas eliminar datos data agregar r row dataframe add

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:

  1. Convierte el marco de datos real a una matriz.
    as.matrix(compData)
  2. Agregue la nueva fila hasta el final.
    rbind(as.matrix(compData), c(5,443))
  3. 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