在R中计算频率

7

这是我的数据

> a
 [1] Male   Male   Female Male   Male   Male   Female Female Male   Male   Female Male   Male   Male  
[15] Female Female Female Male   Female Male   Female Male   Male   Female Male   Male   Female Male  
[29] Male   Male   Female Male   Male   Male   Female Female Male   Male   Male   Male   Male  
Levels:  Female Male

> b
[1] 0 1 0 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 1 1 1
Levels: 0 1

> table(a,b)
        b
a         0  1
          0  0
  Female 10  4
  Male   12 15

我不知道为什么table(a,b)的结果会有一行(0 0),我的期望结果如下:

> table(a,b)
        b
a         0  1
  Female 10  4
  Male   12 15

你能告诉我为什么会发生这种情况以及如何纠正它吗?谢谢!

> dput(a)
structure(c(3L, 3L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L, 2L, 3L, 3L, 
3L, 2L, 2L, 2L, 3L, 2L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 
3L, 2L, 3L, 3L, 3L, 2L, 2L, 3L, 3L, 3L, 3L, 3L), .Label = c("", 
"Female", "Male"), class = "factor")

> dput(b)
structure(c(1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 
2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 
1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L), .Label = c("0", 
"1"), class = "factor")

8
你可能拥有一个名为 "" 的空层级。尝试使用 nlevels(a) 函数。 - user20650
3
根据Levels:__Female Male中额外的空格,我认为@user20650是正确的。如果只有两个级别,那么应该是Levels:_Female Male(只有一个空格,下划线代表空格)。 - r2evans
2
正如您所看到的,您的 dput 中有三个级别(.Label)。解决您的数据输入问题,您就可以修复表格了。(或者只需重新分配级别,使用 levels(a) <- c("女性", "男性")。) - r2evans
2
或者使用droplevels命令:a <- droplevels(a) - Dave2e
2
这将适用于示例数据:table(as.character(a), b, useNA="no")。因子总是有点奇怪。我总是尝试在我的read.函数系列中使用as=TRUE,它将变量转换为字符而不是因子。 - lmo
显示剩余8条评论
1个回答

1

从以上评论可以看出:

发生这种情况是因为a中存在一个空的因子水平:

> levels(a)
[1] ""       "Female" "Male" 

你可以制作一个忽略空因子水平的表格(来自@lmo的评论):
table(as.character(a), b)

另外,你可以轻松地删除没有观测值的因子水平(来自@Dave2e的评论)

a <- droplevels(a)
table(a, b)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接