¿Convertir la columna data.frame en un vector?
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!)
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)
Ahora existe una manera fácil de hacer esto usando dplyr
.
dplyr::pull(aframe, a2)