R中的频率交叉列表用于分类变量

时间:2016-10-21 00:09:21

标签: r

我有一个包含200多个分类变量的表。样品:

Cat1 Cat2 Cat3
A B A
B A A
A C A
A B A

我想获得数据集中出现的任何类别的频率(次数)。像这样:

  • A 8
  • B 3 ..

我对R很新,并尝试使用for循环来获得结果。我相信有更好的方法可以做到这一点。你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

一般来说,计算每种类型牌数的最方便的函数是?table

d <- read.table(text="Cat1 Cat2 Cat3
A B A
B A A
A C A
A B A", header=T)
table(d$Cat1)
# A B 
# 3 1 

对数据集中的每个分类变量执行table()的最便捷方法是使用?summary.data.frame

summary(d)
#  Cat1  Cat2  Cat3 
#  A:3   A:1   A:4  
#  B:1   B:2        
#        C:1        

另一方面,如果您希望获得折叠所有分类变量的表格,可以将table()?unlist一起使用:

table(unlist(d))
# A B C 
# 8 3 1 

要了解那里发生了什么,要意识到的是,在R中,数据框是一种特殊的列表:每个变量都是一个向量,数据帧是一个向量列表等长(参见,here)。 unlist()函数将这些函数转换为从第一个到最后一个连接的一个长向量。请注意,如果您混入了一些非分类变量,则需要排除table(unlist(d[,c(<variables to use>)]))之类的变量。