En R, ¿cómo agrega una nueva fila a un marco de datos una vez que el marco de datos ya se ha inicializado?
Hasta ahora tengo esto:
df <- data.frame("hi", "bye")
names(df) <- c("hello", "goodbye")
#I am trying to add "hola" and "ciao" as a new row
de <- data.frame("hola", "ciao")
merge(df, de) # Adds to the same row as new columns
# Unfortunately, I couldn't find an rbind() solution that wouldn't give me an error
Cualquier ayuda sería apreciada

detambién.names(de) <- c("hello","goodbye")yrbindrbind(df, setNames(de, names(df)))rbind(data.frame(a = 1), data.frame(b = 2))... ¿por qué quieres hacerlo? Espero que arroje un error independientemente. Es como estarmergecon unabyvariable aleatoria . Y esto es 2015, ¿no están todos listosoptions(stringsAsFactors = FALSE)?stringsAsFactors=FALSEpuede ser una solución rápida, pero cambiar los valores predeterminados que otras personas establecerán de manera diferente realmente puede arruinar un día.Respuestas:
Como @Khashaa y @Richard Scriven señalan en los comentarios, debe establecer nombres de columna consistentes para todos los marcos de datos que desea agregar.
Por lo tanto, debe declarar explícitamente los nombres de las columnas para el segundo marco de datos
dey luego usarlosrbind(). Solo establece los nombres de columna para el primer marco de datosdf:fuente
newdf<-rbind(df, data.frame(hello="hola", goodbye="ciao"))O con variable:newdf<-rbind(df, data.frame(hello=var1, goodbye=var2))Hagámoslo simple:
fuente
df[nrow(df) + 1, 1:2] = c("v1", "v2")ydf[nrow(df), 3] = 100aún así es un buen punto sobre agregar una nueva fila. Entonces, +1list(). Revertí tu edición.O, inspirado por @MatheusAraujo:
df[nrow(df) + 1,] = list("v1","v2")Esto permitiría tipos de datos mixtos.
fuente
Ahora hay
add_row()de los paquetestibbleotidyverse.Las columnas no especificadas obtienen un
NA.fuente
rbindyas.matrixdebajoMe gusta en
listlugar decporque maneja mejor los tipos de datos mixtos. Agregar una columna adicional a la pregunta del póster original:Tenga en cuenta que se requiere algún control adicional si la conversión de cadena / factor es importante.
O usando las variables originales con la solución de MatheusAraujo / Ytsen de Boer:
Tenga en cuenta que esta solución no funciona bien con las cadenas a menos que haya datos existentes en el marco de datos.
fuente
helloygoodbyeestán en el personajedf, puede hacer lo siguiente. No necesariamente usa nombres en una lista.df <- data.frame(hello = "hi", goodbye = "bye", volume = 1,stringsAsFactors = FALSE); rbind(df, list("hola", "ciao", 100)).No es terriblemente elegante, pero:
De la documentación de la
rbindfunción:fuente
Necesito agregar
stringsAsFactors=FALSEal crear el marco de datos..
fuente
Asegúrese de especificar
stringsAsFactors=FALSEal crear el marco de datos:Si no se usa
stringsAsFactors=FALSEal crear el marco de datos, se producirá el siguiente error al intentar agregar la nueva fila:fuente
Hay una manera más simple de agregar un registro de un marco de datos a otro SI sabe que los dos marcos de datos comparten las mismas columnas y tipos. Para añadir una fila a partir
xxdeyysimplemente hacer lo siguiente dondeies lai'th en filaxx.Simple como eso. Sin ataduras desordenadas. Si necesita agregar todo
xxayy, entonces llame a un bucle o aproveche las habilidades de secuencia de R y haga esto:fuente
Si desea crear un marco de datos vacío y agregar contenido en un bucle, lo siguiente puede ayudar:
Espero eso ayude :)
fuente