una tabla seleccionar insertar filas extraer eliminar elegir data crear como columnas columna r vector type-conversion

tabla - R-friendly forma de convertir la columna R data.frame a un vector?



insertar columna en data frame r (7)

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 ocurre, 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 desactivado, así que por favor 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, ¡relacionado con Python o algún otro lenguaje sería de ayuda!)


Ahora hay una manera fácil de hacerlo usando dplyr .

dplyr::pull(aframe, a2)


No necesita as.vector() , pero sí necesita una correcta indexación: avector <- aframe[ , "a2"]

La otra cosa a tener en cuenta es la opción drop=FALSE de [ :

R> aframe <- data.frame(a1=c1:5, a2=6:10, a3=11:15) R> aframe a1 a2 a3 1 1 6 11 2 2 7 12 3 3 8 13 4 4 9 14 5 5 10 15 R> avector <- aframe[, "a2"] R> avector [1] 6 7 8 9 10 R> avector <- aframe[, "a2", drop=FALSE] R> avector a2 1 6 2 7 3 8 4 9 5 10 R>


Otra ventaja de utilizar el operador ''[['' es que funciona tanto con data.frame como con data.table. Entonces, si la función tiene que ejecutarse tanto para data.frame como para data.table, y desea extraer una columna de ella como un vector, entonces

data[["column_name"]]

es mejor.


Puede usar $ extraction:

class(aframe$a1) [1] "numeric"

o el doble corchete cuadrado:

class(aframe[["a1"]]) [1] "numeric"


Si solo usa el operador de extracción, funcionará. Por defecto, [] establece la opción drop=TRUE , que es lo que quiere aquí. Ver ?''['' Para más detalles.

> 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) > aframe[,''a2''] [1] 6 7 8 9 10 > class(aframe[,''a2'']) [1] "numeric"


Voy a tratar de explicar esto sin cometer ningún error, pero apuesto a que esto atraerá una aclaración o dos en los comentarios.

Un marco de datos es una lista. Cuando subconjunta un marco de datos usando el nombre de una columna y [ , lo que está obteniendo es una sublista (o un marco de datos secundario). Si quieres la columna atómica real, puedes usar [[ , o algo confuso (para mí) podrías hacer un aframe[,2] que devuelve un vector, no una sublista.

Así que intente ejecutar esta secuencia y tal vez las cosas serán más claras:

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


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) avector <- as.vector(aframe[''a2'']) avector<-unlist(avector) #this will return a vector of type "integer"