Bagaimana mendapatkan baris dari R data.frame


103

Saya memiliki data.frame dengan header kolom.

Bagaimana saya bisa mendapatkan baris tertentu dari data.frame sebagai daftar (dengan tajuk kolom sebagai kunci untuk daftar)?

Secara khusus, data.frame saya adalah

      ABC
    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

Dan saya ingin mendapatkan baris yang setara dengan

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

Jawaban:


128
x[r,]

dengan r adalah baris yang Anda minati. Coba ini, misalnya:

#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

Halaman ini (dari situs bermanfaat ini ) memiliki informasi yang baik tentang pengindeksan seperti ini.


14

Pengindeksan logis sangat R-ish. Mencoba:

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

Atau:

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

7

Mencoba:

> 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

Jika Anda tidak mengetahui nomor barisnya, tetapi mengetahui beberapa nilai, maka Anda dapat menggunakan 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)

apakah yang Anda maksud ini sebagai gantinya? subset (x, A == 5 && B == 4.25 && C == 4.5)
momeara

Tidak, seharusnya:subset(x, A ==5 & B==4.25 & C==4.5)
IRTFM

1

10 tahun kemudian ---> Menggunakan tidyverse kita dapat mencapai ini dengan mudah dan meminjam daun dari Christopher Bottoms . Untuk pemahaman yang lebih baik, lihat 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

Dibuat pada 2020-08-06 oleh paket reprex (v0.3.0)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.