У меня есть кадр данных со столбцами категориальных данных, поставляемых в виде строк. Категории для каждого столбца одинаковы, например:Таблица столбцов для фрейма данных
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)))' –