How to get row from R data.frame

后端 未结 5 548
温柔的废话
温柔的废话 2020-12-23 16:02

I have a data.frame with column headers.

How can I get a specific row from the data.frame as a list (with the column headers as keys for the list)?

Specific

相关标签:
5条回答
  • 2020-12-23 16:10

    10 years later ---> Using tidyverse we could achieve this simply and borrowing a leaf from Christopher Bottoms. For a better grasp, see 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
    

    Created on 2020-08-06 by the reprex package (v0.3.0)

    0 讨论(0)
  • 2020-12-23 16:14

    Try:

    > 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
    
    0 讨论(0)
  • 2020-12-23 16:23

    If you don't know the row number, but do know some values then you can use subset

    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)
    
    0 讨论(0)
  • 2020-12-23 16:26
    x[r,]
    

    where r is the row you're interested in. Try this, for example:

    #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
    

    This page (from this useful site) has good information on indexing like this.

    0 讨论(0)
  • 2020-12-23 16:27

    Logical indexing is very R-ish. Try:

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

    Or:

    subset( x, A ==5 & B==4.25 & C==4.5 )
    
    0 讨论(0)
提交回复
热议问题