¿Convertir la columna data.frame en un vector?

Resuelto Dolan Antenucci asked hace 54 años • 12 respuestas

Tengo un marco de datos como:

a1 = c(1, 2, 3, 4, 5)
a2 = c(6, 7, 8, 9, 10)
a3 = c(11, 12, 13, 14, 15)
aframe = data.frame(a1, a2, a3)

Intenté lo siguiente para convertir una de las columnas en un vector, pero no funciona:

avector <- as.vector(aframe['a2'])
class(avector) 
[1] "data.frame"

Esta es la única solución que se me ocurrió, pero supongo que tiene que haber una mejor manera de hacerlo:

class(aframe['a2']) 
[1] "data.frame"
avector = c()
for(atmp in aframe['a2']) { avector <- atmp }
class(avector)
[1] "numeric"

Nota: Mi vocabulario anterior puede estar incorrecto, así que corrígeme si es así. Todavía estoy aprendiendo el mundo de R. Además, se agradece cualquier explicación de lo que está sucediendo aquí (es decir, en relación con Python o algún otro lenguaje, ¡sería útil!)

Dolan Antenucci avatar Jan 01 '70 08:01 Dolan Antenucci
Aceptado

Voy a intentar explicar esto sin cometer ningún error, pero apuesto a que esto atraerá una o dos aclaraciones en los comentarios.

Un marco de datos es una lista. Cuando crea un subconjunto de un marco de datos usando el nombre de una columna y [, lo que obtiene es una sublista (o un submarco de datos). Si desea la columna atómica real, puede usar [[, o de manera algo confusa (para mí), puede hacer aframe[,2]lo que devuelve un vector, no una sublista.

Intente ejecutar esta secuencia y tal vez las cosas queden más claras:

avector <- as.vector(aframe['a2'])
class(avector) 

avector <- aframe[['a2']]
class(avector)

avector <- aframe[,2]
class(avector)
joran avatar Aug 15 '2011 20:08 joran

Ahora existe una manera fácil de hacer esto usando dplyr.

dplyr::pull(aframe, a2)
Andrew Brēza avatar Jan 08 '2018 17:01 Andrew Brēza