Cómo obtener una fila de R data.frame


103

Tengo un data.frame con encabezados de columna.

¿Cómo puedo obtener una fila específica de data.frame como una lista (con los encabezados de columna como claves para la lista)?

Específicamente, mi data.frame es

      A B C
    1 5 4,25 4,5
    2 3,5 4 2,5
    3 3,25 4 4
    4 4,25 4,5 2,25
    5 1,5 4,5 3

Y quiero tener una fila que sea equivalente a

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

Respuestas:


128
x[r,]

donde r es la fila que le interesa. Pruebe esto, por ejemplo:

#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

Esta página (de este sitio útil ) tiene buena información sobre indexación como esta.


14

La indexación lógica es muy R-ish. Tratar:

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

O:

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

7

Tratar:

> 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

5

Si no conoce el número de fila, pero conoce algunos valores, puede usar subconjunto

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)

¿te refieres a esto en su lugar? subconjunto (x, A == 5 && B == 4.25 && C == 4.5)
momeara

No, debería haber sido:subset(x, A ==5 & B==4.25 & C==4.5)
IRTFM

1

10 años después ---> Usando tidyverse pudimos lograr esto simplemente y tomando prestada una hoja de Christopher Bottoms . Para una mejor comprensión, consulte slice().

library(tidyverse)
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)
)

x
#>      A    B    C
#> 1 5.00 4.25 4.50
#> 2 3.50 4.00 2.50
#> 3 3.25 4.00 4.00
#> 4 4.25 4.50 2.25
#> 5 1.50 4.50 3.00

y<-c(A=5, B=4.25, C=4.5)
y
#>    A    B    C 
#> 5.00 4.25 4.50

#The slice() verb allows one to subset data row-wise. 
x <- x %>% slice(1) #(n) for the nth row, or (i:n) for range i to n, (i:n()) for i to last row...

x
#>   A    B   C
#> 1 5 4.25 4.5

#Test that the items in the row match the vector you wanted
x[1,]==y
#>      A    B    C
#> 1 TRUE TRUE TRUE

Creado el 2020-08-06 por el paquete reprex (v0.3.0)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.