我有一个频率表,计算向量中元素的频率
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
我知道我可以通过名字(a)访问该名称。但是当我试图访问第二行的值时
a[1, "0"]
# Error in a[1, "0"] : incorrect number of dimensions
a[1, 1]
# Error in a[1, 1] : incorrect number of dimensions
答案 0 :(得分:8)
这个表实际上是一个数组。
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"
它的名字在顶部,而值在底部。
names(a)
[1] "0" "1" "2" "3" "4"
您可以通过多种方式访问其元素。
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"
它还有nrow
和dim
属性,这些属性在table
的最后几行中设置。
y <- array(tabulate(bin, pd), dims, dimnames = dn)
class(y) <- "table"
虽然我真的不清楚为什么nrow(a)
为5,但a[1,]
会返回错误。
答案 1 :(得分:4)
table()
命令返回一个命名向量,而不是矩阵或data.frame。如果你想访问零的数量,你可以
a["0"]
请注意,级别的数字属性会丢失,因为命名向量的名称必须是字符。如果您愿意,可以使用as.numeric(names(a))
将其转换回来
答案 2 :(得分:3)
a = as.numeric(姓名(a))
它可以让您访问第一列
答案 3 :(得分:2)
您正在使用的表是一维数组,并且您使用2维来检索一个元素,这个元素是您收到该错误的。
使用像[1]
这样的东西