2014-11-27 18 views
6

Tôi có một bảng tần số, đếm tần số của các yếu tố trong một vectorLàm thế nào để truy cập vào các giá trị trong một bảng tần số

a = table(c(0,1,1,1,0,2,2,4,1,2,3,2,1,2,3,1,1,1,2,3,4,1,1,0)) 
a 
# 0 1 2 3 4 
# 3 10 6 3 2 

Tôi biết tôi có thể truy cập vào tên bằng tên (a). Nhưng khi tôi cố truy cập các giá trị của hàng SECOND

a[1, "0"] 
# Error in a[1, "0"] : incorrect number of dimensions 

a[1, 1] 
# Error in a[1, 1] : incorrect number of dimensions 
+1

Tôi muốn khuyên tránh sử dụng ' table' hoàn toàn và sử dụng 'dplyr':' x%>% tally() '. Điều này trả về một bảng trong đó các loại hoạt động này rất dễ dàng. – Hugh

Trả lời

7

Bảng này thực sự là một mảng.

x <- c(0,1,1,1,0,2,2,4,1,2,3,2,1,2,3,1,1,1,2,3,4,1,1,0) 
(a <- table(x)) 
# 
# 0 1 2 3 4 
# 3 10 6 3 2 
class(unclass(a)) 
# [1] "array" 

Tên của nó ở trên cùng và các giá trị ở dưới cùng.

names(a) 
[1] "0" "1" "2" "3" "4" 

Bạn có thể truy cập các thành phần của nó theo nhiều cách.

a[1]      ## access named element by index 
# 0 
# 3 
a[[1]]     ## access unnamed element by index 
# [1] 3 
a["0"]     ## access named element by name 
# 0 
# 3 
a[["0"]]     ## access unnamed element by name 
# [1] 3 
as.vector(a)    ## as.vector() drops table down to unnamed vector 
# [1] 3 10 6 3 2 
c(a)[2:4]    ## c() drops table down to named vector 
# 1 2 3 
# 10 6 3 
class(a[2:4]) 
# [1] "array" 
class(c(a)[2:4]) 
# [1] "integer" 

Nó cũng có một nrowdim thuộc tính, được thành lập trong vài dòng cuối cùng của table.

y <- array(tabulate(bin, pd), dims, dimnames = dn) 
class(y) <- "table" 

Mặc dù nó thực sự không rõ ràng với tôi tại sao nrow(a) là 5 nhưng a[1,] trả về lỗi.

+0

Tôi muốn đưa ra lời giải thích này, nhưng nếu bạn làm 'nrow (a)', bạn thực sự nhận được kết quả (mặc dù không phải là điều bạn nghĩ). – A5C1D2H2I1M1N2O1R2T1

+0

Ngay cả 'dim' hoạt động trên một' bảng 'trong khi nó sẽ không nằm trên một vector có tên .... Lạ. – A5C1D2H2I1M1N2O1R2T1

+0

Có vẻ tốt. Không biết tại sao bạn đặt 'c (a) [2: 4]' mặc dù - chỉ 'a [2: 4]' cho kết quả gần như giống nhau, không có kích thước. – thelatemail

4

Lệnh table() trả về một vector có tên, không phải là ma trận hoặc data.frame. Nếu bạn muốn truy cập số lượng số không, bạn sẽ làm

a["0"] 

Lưu ý rằng các thuộc tính số của các cấp bị mất vì tên của vectơ được đặt tên phải là ký tự. Bạn có thể chuyển đổi chúng trở lại với as.numeric(names(a)) nếu bạn thích

+0

Điều này là chính xác. Thử ['0'] == 3. Điều đó sẽ cho bạn thấy rằng tên của các vectơ là 0,1,2,3,4. – Jason

2

Bảng bạn đang sử dụng là mảng một chiều và bạn đang sử dụng 2 chiều để truy lục phần tử đó khi bạn nhận được lỗi đó.

Sử dụng một cái gì đó giống như một [1]

1

a = as.numeric (tên (a))

nó sẽ cung cấp cho bạn truy cập vào cột đầu tiên

Các vấn đề liên quan