问题
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
回答1:
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.
回答2:
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
回答3:
a = as.numeric(names(a))
it will give you access to the first column
回答4:
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]
来源:https://stackoverflow.com/questions/27161975/how-to-access-values-in-a-frequency-table