Quiero crear un vector a partir de una fila de un marco de datos. Pero no quiero tener que tener nombres de filas y columnas. Probé varias cosas ... pero no tuve suerte.
Este es mi marco de datos:
> df <- data.frame(a=c(1,2,4,2),b=c(2,6,2,1),c=c(2.6,8.2,7.5,3))
> df
a b c
1 1 2 2.6
2 2 6 8.2
3 4 2 7.5
4 2 1 3.0
Lo intenté:
> newV <- as.vector(df[1,])
> newV
a b c
1 1 2 2.6
Pero realmente quiero algo parecido a esto:
> newV <- c( 1,2,2.6)
> newV
[1] 1.0 2.0 2.6

c(t(as.matrix(df))):?Respuestas:
Cuando extrae una sola fila de un marco de datos, obtiene un marco de datos de una fila. Conviértalo en un vector numérico:
Como sugiere @Roland,
unlist(df[1,])convertirá el marco de datos de una fila en un vector numérico sin eliminar los nombres. Porunname(unlist(df[1,]))lo tanto, es otra forma un poco más explícita de llegar al mismo resultado.Como @Josh comenta a continuación, si tiene un marco de datos no completamente numérico (alfabético, factorial, mixto ...), necesita en su
as.character(df[1,])lugar.fuente
identical(unlist(df[1,], use.names = FALSE), as.numeric(df[1,]))(y por cierto df todavía no es un nombre sensato para un data.frame ... ;-))Recomiendo
unlist, que mantiene los nombres.Si no quiere un vector con nombre:
fuente
Si no desea cambiar a numérico, puede intentar esto.
fuente
str(as.vector(t(df)[,1]))esnum [1:3] 1 2 2.6, es decir, su código no convertir los resultados a un vector numérico ...t(df)R convierte el marco de datos en una matriz, en este caso una matriz numérica porque todos los elementos son numéricos. Luego[,1]extrae la primera columna (un vector numérico, porque la dimensión redundante se elimina automáticamente).as.vector()simplemente suelta los nombres (lo que también podría hacerunname()).unname(unlist(x))solución es un poco mejor (más eficiente y más transparente).as.vector(t(df)[,1])Me encanta ! ¡Exactamente lo que lo necesito!Aquí hay una
dplyropción basada:fuente
Tenga en cuenta que debe tener cuidado si su fila contiene un factor. Aquí hay un ejemplo:
Aquí hay otro ejemplo (por defecto, data.frame () convierte caracteres en factores)
Para evitar este comportamiento, es necesario cuidar el factor, antes de extraerlo:
fuente
Las columnas de los marcos de datos ya son vectores, solo tiene que extraerlos. Tenga en cuenta que coloca la columna que desea después de la coma, no antes:
Si realmente quieres una fila, haz lo que dijo Ben y usa las palabras correctamente en el futuro.
fuente