I have a frequency table, counting the frequency of elements in a vector
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
I know I can access the name by names(a). But when I tried to access the values of the SECOND row
a[1, "0"]
# Error in a[1, "0"] : incorrect number of dimensions
a[1, 1]
# Error in a[1, 1] : incorrect number of dimensions
This table is actually an array.
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"
Its names are on top, and values on bottom.
names(a)
[1] "0" "1" "2" "3" "4"
You can access its elements a number of ways.
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"
It also has an nrow
and dim
attribute, which are set up in the last few lines of table
.
y <- array(tabulate(bin, pd), dims, dimnames = dn)
class(y) <- "table"
Although it's really not clear to me why nrow(a)
is 5 but a[1,]
returns an error.
The table()
command is returning a named vector, not a matrix or data.frame. If you want to access the count of zeros, you'd do
a["0"]
Note that the numeric properties of the levels are lost because the names of named vectors must be characters. You can convert them back with as.numeric(names(a))
if you like
The table you are using is a one dimensional array and you are using 2- dimensions to retrieve an element that's wwhy you are getting that error.
Use something like a[1]
a = as.numeric(names(a))
it will give you access to the first column