【发布时间】:2017-02-02 16:04:27
【问题描述】:
我有一个数据框,其中包含以字符串形式提供的分类数据列。每列的类别相同,例如:
myDF=data.frame(col1=sample(c("a","b","c"),10,replace=T),
col2=sample(c("a","b","c"),10,replace=T),
col3=sample(c("a","b","c"),10,replace=T))
我想按列生成每个类别的计数表。
当所有列都包含所有类别时,这可以通过apply 使用函数table 来完成,例如:
> myDF
col1 col2 col3
1 a c a
2 b b b
3 a a b
4 b b a
5 c c a
6 a a a
7 a c c
8 a a c
9 c a a
10 a a b
> apply(myDF,2,table)
col1 col2 col3
a 6 5 5
b 2 2 3
c 2 3 2
但是,如果某一列缺少某些类别,这将不起作用,因为 table 不知道预期的类别:
myDF=data.frame(col1=sample(c("a","b","c"),10,replace=T),
col2=sample(c("a","b","c"),10,replace=T),
col3=sample(c("a","b"),10,replace=T))
给予:
> myDF
col1 col2 col3
1 c a a
2 a a b
3 b a a
4 c c a
5 c a a
6 c c a
7 c b a
8 c b b
9 a a a
10 b b a
> apply(myDF,2,table)
$col1
a b c
2 2 6
$col2
a b c
5 3 2
$col3
a b
8 2
如何生成一个看起来像第一个的表格,其中任何缺失的类别都为 0?
【问题讨论】:
-
另见
table(stack(lapply(myDF, as.character)))