217 votes

Convertir une colonne data.frame en vecteur ?

J'ai un cadre de données tel que :

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)

J'ai essayé ce qui suit pour convertir une des colonnes en vecteur, mais cela ne fonctionne pas :

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

C'est la seule solution que j'ai trouvée, mais je suppose qu'il doit y avoir une meilleure façon de procéder :

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

Nota: Mon vocabulaire ci-dessus est peut-être erroné, veuillez me corriger si c'est le cas. Je suis encore en train d'apprendre le monde de R. De plus, toute explication de ce qui se passe ici est appréciée (par exemple, un lien avec Python ou un autre langage serait utile !)

14voto

joel.wilson Points 6177

Un autre avantage de l'utilisation de l'opérateur '[[' est qu'il fonctionne à la fois avec data.frame et data.table. Ainsi, si la fonction doit être exécutée à la fois pour data.frame et data.table, et que vous voulez en extraire une colonne sous forme de vecteur, alors

data[["column_name"]] 

est le meilleur.

10voto

Dr_Hope Points 317
as.vector(unlist(aframe['a2']))

6voto

shubham ranjan Points 119
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"

5voto

Ari B. Friedman Points 24940

Si vous utilisez simplement l'opérateur d'extraction, cela fonctionnera. Par défaut, [] définit l'option drop=TRUE ce qui est ce que vous voulez ici. Voir ?'[' pour plus de détails.

>  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"

2voto

Adrian DSouza Points 51

J'utilise des listes pour filtrer les dataframes selon qu'ils ont ou non une valeur %dans une liste.

J'avais créé manuellement des listes en exportant un dataframe à 1 colonne vers Excel où j'ajoutais " ", autour de chaque élément, avant de coller dans R : list <- c("el1", "el2", ...) qui était généralement suivi de FilteredData <- subset(Data, Column %in% list).

Après avoir cherché sur stackoverflow et n'avoir pas trouvé de moyen intuitif de convertir un dataframe à une colonne en une liste, je publie aujourd'hui ma toute première contribution à stackoverflow :

# assuming you have a 1 column dataframe called "df"
list <- c()
for(i in 1:nrow(df)){
  list <- append(list, df[i,1])
}
View(list)
# This list is not a dataframe, it is a list of values
# You can filter a dataframe using "subset([Data], [Column] %in% list")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X