table() 可以用来统计每个因子频数
例如:
> sample(LETTERS,size = 48, replace = T) -> a ##从26个大写字母中随机抽取48个
> # replace = T,意味着可放回抽样
> a
[1] "P" "E" "R" "F" "O" "D" "I" "R" "X" "N" "B" "U" "H" "E" "G" "G" "Q" "K" "N" "M" "K" "C" "N" "U" "G" "Z" "O" "Z" "B" "V" "V" "V" "J"
[34] "G" "Q" "K" "J" "E" "Z" "I" "I" "R" "G" "N" "M" "U" "N" "P"
> table(a)
a
B C D E F G H I J K M N O P Q R U V X Z
2 1 1 3 1 5 1 3 2 3 2 5 2 2 2 3 3 3 1 3
对于两个矩阵,向量等等都可以
例如:
> a <- letters[1:6]
> b <- LETTERS[1:6]
> table(a,b)
b
a A B C D E F
a 1 0 0 0 0 0
b 0 1 0 0 0 0
c 0 0 1 0 0 0
d 0 0 0 1 0 0
e 0 0 0 0 1 0
f 0 0 0 0 0 1
> a
[1] "a" "b" "c" "d" "e" "f"
> b
[1] "A" "B" "C" "D" "E" "F"
## 一个清晰的例子
> a <- rep("a",4)
> a
[1] "a" "a" "a" "a"
> b <- rep(c("a","b"),2)
> b
[1] "a" "b" "a" "b"
> table(a,b)
b
a a b
a 2 2
>
接下来在介绍一些具体的参数
例如:
## exclude 不统计
> a <- sample(letters[1:10],size = 10,replace = T)
> a
[1] "h" "d" "d" "d" "i" "e" "e" "j" "c" "f"
> table(a)
a
c d e f h i j
1 3 2 1 1 1 1
> table(a,exclude = "d") ## 不统计 "d"
a
c e f h i j
1 2 1 1 1 1
> ## useNA 分别可选三个参数 "no" "ifany" "always"
> ## no: 不统计NA
> head(airquality)
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> with(head(airquality),table(Ozone>30,Day,useNA = "no"))
Day
1 2 3 4 5 6
FALSE 0 0 1 1 0 1
TRUE 1 1 0 0 0 0
> ## ifany: 只统计行,不统计列
> with(head(airquality),table(Ozone>30,Day,useNA = "ifany"))
Day
1 2 3 4 5 6
FALSE 0 0 1 1 0 1
TRUE 1 1 0 0 0 0
<NA> 0 0 0 0 1 0
> ## always:行列都统计
> with(head(airquality),table(Ozone>30,Day,useNA = "always"))
Day
1 2 3 4 5 6 <NA>
FALSE 0 0 1 1 0 1 0
TRUE 1 1 0 0 0 0 0
<NA> 0 0 0 0 1 0 0
> a <- head(airquality)
> a$Day[1:3] <- NA
> a
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 NA
2 36 118 8.0 72 5 NA
3 12 149 12.6 74 5 NA
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> with(a,table(Ozone>30,Day,useNA = "always"))
Day
4 5 6 <NA>
FALSE 1 0 1 1
TRUE 0 0 0 2
<NA> 0 1 0 0
>
结果维度的命名
例如
## 如果没有指定的dnn,则按照默认的list.names 去命名,行列命名控制如下
> with(a,table(Ozone>30,Day,useNA = "always",deparse.level = 0))
1 2 3 4 5 6 <NA>
FALSE 0 0 1 1 0 1 0
TRUE 1 1 0 0 0 0 0
<NA> 0 0 0 0 1 0 0
> with(a,table(Ozone>30,Day,useNA = "always",deparse.level = 1))
Day
1 2 3 4 5 6 <NA>
FALSE 0 0 1 1 0 1 0
TRUE 1 1 0 0 0 0 0
<NA> 0 0 0 0 1 0 0
> with(a,table(Ozone>30,Day,useNA = "always",deparse.level = 2))
Day
Ozone > 30 1 2 3 4 5 6 <NA>
FALSE 0 0 1 1 0 1 0
TRUE 1 1 0 0 0 0 0
<NA> 0 0 0 0 1 0 0
> a
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
> ## 也可用dnn指定
> with(a,table(Ozone>30,Day,useNA = "always",dnn = c("Oznon大于三十","天数"))) ## 顺序与输入数据的顺序相同
天数
Oznon大于三十 1 2 3 4 5 6 <NA>
FALSE 0 0 1 1 0 1 0
TRUE 1 1 0 0 0 0 0
<NA> 0 0 0 0 1 0 0
>