9

我有一个频率表,计算向量中元素的频率

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
4

4 回答 4

12

这个表实际上是一个数组。

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"

它还有一个nrowanddim属性,这些属性是在 的最后几行中设置的table

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

虽然我真的不清楚为什么nrow(a)是 5 但a[1,]返回错误。

于 2014-11-27T02:07:14.107 回答
4

table()命令返回一个命名向量,而不是矩阵或 data.frame。如果你想访问零的计数,你会做

a["0"]

请注意,级别的数字属性会丢失,因为命名向量的名称必须是字符。as.numeric(names(a))如果您愿意,可以将它们转换回来

于 2014-11-27T02:08:17.053 回答
4

a = as.numeric(名称(a))

它将使您可以访问第一列

于 2017-06-26T05:34:38.077 回答
2

您使用的表是一维数组,您使用二维来检索元素,这就是您收到该错误的原因。

使用类似 [1]

于 2014-11-27T03:24:00.053 回答