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
dplyr
opció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