Je souhaite créer un vecteur à partir d'une ligne d'un bloc de données. Mais je ne veux pas avoir de noms de lignes et de colonnes. J'ai essayé plusieurs choses ... mais je n'ai pas eu de chance.
Voici ma trame de données:
> 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
J'ai essayé:
> newV <- as.vector(df[1,])
> newV
a b c
1 1 2 2.6
Mais je veux vraiment quelque chose qui ressemble à ceci:
> newV <- c( 1,2,2.6)
> newV
[1] 1.0 2.0 2.6
c(t(as.matrix(df)))
?Réponses:
Lorsque vous extrayez une seule ligne d'un bloc de données, vous obtenez un bloc de données d'une ligne. Convertissez-le en vecteur numérique:
Comme le suggère @Roland,
unlist(df[1,])
convertira la trame de données d'une ligne en un vecteur numérique sans supprimer les noms. Ilunname(unlist(df[1,]))
existe donc une autre façon, légèrement plus explicite, d'arriver au même résultat.Comme @Josh le commente ci-dessous, si vous avez un bloc de données non entièrement numérique (alphabétique, factoriel, mixte ...), vous en avez besoin à la
as.character(df[1,])
place.la source
identical(unlist(df[1,], use.names = FALSE), as.numeric(df[1,]))
(et btw df n'est toujours pas un nom sensé pour un data.frame ... ;-))Je recommande
unlist
, qui garde les noms.Si vous ne voulez pas de vecteur nommé:
la source
Si vous ne voulez pas passer au numérique, vous pouvez essayer ceci.
la source
str(as.vector(t(df)[,1]))
estnum [1:3] 1 2 2.6
, par exemple votre code ne convertir les résultats à un vecteur numérique ...t(df)
R contraint la trame de données à une matrice, dans ce cas une matrice numérique car tous les éléments sont numériques.[,1]
Extrait ensuite la première colonne (un vecteur numérique, car la dimension redondante est automatiquement supprimée).as.vector()
supprime simplement les noms (avec lesquels vous pouvez également faireunname()
).unname(unlist(x))
solution est un peu meilleure (plus efficace et plus transparente).as.vector(t(df)[,1])
J'aime cela ! Exactement ce dont j'ai besoin!Voici une
dplyr
option basée:la source
Notez que vous devez faire attention si votre ligne contient un facteur. Voici un exemple:
Voici un autre exemple (par défaut data.frame () convertit les caractères en facteurs)
Pour éviter ce comportement, vous devez prendre soin du facteur avant de l'extraire:
la source
Les colonnes de trames de données sont déjà des vecteurs, il suffit de les extraire. Notez que vous placez la colonne souhaitée après la virgule, pas avant:
Si vous voulez vraiment une ligne, faites ce que Ben a dit et utilisez les mots correctement à l'avenir.
la source