Cách lấy hàng từ R data.frame


103

Tôi có data.frame với các tiêu đề cột.

Làm cách nào để lấy một hàng cụ thể từ data.frame dưới dạng danh sách (với các tiêu đề cột làm khóa cho danh sách)?

Cụ thể, data.frame của tôi là

      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

Và tôi muốn nhận được một hàng tương đương với

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

Câu trả lời:


128
x[r,]

trong đó r là hàng bạn quan tâm. Hãy thử điều này, ví dụ:

#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

Trang này (từ trang hữu ích này ) có thông tin tốt về lập chỉ mục như thế này.


14

Lập chỉ mục logic rất R-ish. Thử:

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

Hoặc là:

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

7

Thử:

> 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

Nếu bạn không biết số hàng, nhưng biết một số giá trị thì bạn có thể sử dụng tập hợp con

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)

ý bạn là cái này phải không? tập hợp con (x, A == 5 && B == 4,25 && C == 4.5)
momeara

Không, lẽ ra phải là:subset(x, A ==5 & B==4.25 & C==4.5)
IRTFM

1

10 năm sau ---> Sử dụng ngăn nắp, chúng ta có thể đạt được điều này một cách đơn giản và mượn một chiếc lá từ Christopher Bottoms . Để nắm rõ hơn, hãy xem 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

Được tạo vào 2020-08-06 bởi gói reprex (v0.3.0)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.