115 votes

Comment obtenir une ligne de R dataframe

J'ai un dataframe avec les en-têtes de colonne.

Comment puis-je obtenir une ligne spécifique du dataframe comme une liste (avec les en-têtes de colonne comme clé pour la liste)?

Plus précisément, mon dataframe est

 A B C
 1 5 4.25 4.5
 2 2.5 3.5 4
 3 3.25 4 4
 4 4.25 4.5 2.25
 5 1.5 3 4.5

Et je veux obtenir une ligne qui est l'équivalent de

> c(a=5, b=4.25, c=4.5)
  a   b   c 
5.0 4.25 4.5 

143voto

Matt Parker Points 7373
x[r,]

où r est la ligne qui vous intéresse. Essayez ceci, par exemple:

#Add your data
x<-structure(list(A = c(5, 3.5, 3.25, 4.25, 1.5), B = c(4.25, 4, 
4, 4.5, 4.5), C = c(4.5, 2.5, 4, 2.25, 3)), .Names = c("A", "B", 
"C"), class = "data.frame", row.names = c(NA, -5L))

#The vector your result should match
y<-c(A=5, B=4.25, C=4.5)

#Test that the items in the row match the vector you wanted
x[1,]==y

Cette page (à partir de ce site utile) a de bonnes informations sur l'indexation de ce genre.

16voto

BondedDust Points 105234

Logique d'indexation est très R-ish. Essayez:

 x[ x$A ==5 & x$B==4.25 & x$C==4.5 , ] 

Ou:

subset( x, A ==5 & B==4.25 & C==4.5 )

8voto

ars Points 35803

Essayez:

> d <- data.frame(a=1:3, b=4:6, c=7:9)

> d
  a b c
1 1 4 7
2 2 5 8
3 3 6 9

> d[1, ]
  a b c
1 1 4 7

> d[1, ]['a']
  a
1 1

5voto

Thierry Points 6246

Si vous ne connaissez pas le numéro de ligne, mais ne savez certaines valeurs alors vous pouvez utiliser un sous-ensemble

x<-structure(list(A = c(5, 3.5, 3.25, 4.25, 1.5), B = c(4.25, 4, 
4, 4.5, 4.5), C = c(4.5, 2.5, 4, 2.25, 3)), .Names = c("A", "B", 
"C"), class = "data.frame", row.names = c(NA, -5L))
subset(x, A ==5 & B==4.25 & C==4.5)

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