R语⾔学习笔记——table函数的应⽤
⼀、table 函数对应的就是统计学中的列联表,是⼀种记录频数的⽅法,对于统计来说有⾮常重要的应⽤,下⾯的例⼦都是针对维数为2的情况举例,多维的情况是类似的
下⾯看⼀个例⼦:
1> ct <- data.frame(
2+ Vote.for.X = factor(c("Yes", "Yes", "No", "Not Sure", "No"), levels = c("Yes", "No", "Not Sure")),
3+ Vote.for.X.Last.Time = factor(c("Yes", "No", "No", "Yes", "No"), levels = c("Yes", "No"))
4+ )
5> ct
6 Vote.for.X Vote.for.X.Last.Time
7 1 Yes Yes压岁钱英文
8 2 Yes No
9 3 No No
10 4 Not Sure Yes
11 5 No No
12> cttab <-table(ct)
13> cttab
14 Vote.for.X.Last.Time
15Vote.for.X Yes No
16 Yes 1 1
17 No 0 2
18 Not Sure 1 0
⾸先我们创建了⼀个⽰例数据集合,其中我们指定我们的因⼦的⽔平,然后 table 函数则是统计所有因⼦对出现的情况的频数
下⾯看⼀下 cttab 的特点:
1> mode(cttab)
2[1] "numeric"南通培训网
3> str(cttab)
4 'table' int [1:3, 1:2] 1 0 1 1 2 0
5 - attr(*, "dimnames")=List of 2
6 ..$ Vote.for.X : chr [1:3] "Yes" "No" "Not Sure"
7 ..$ Vote.for.X.Last.Time: chr [1:2] "Yes" "No"
8> summary(cttab)
9Number of cas in table: 5
10Number of factors: 2
11Test for independence of all factors:
12 Chisq = 2.9167, df = 2, p-value = 0.2326
13 Chi-squared approximation may be incorrect
14> attributes(cttab)
15$dim
16[1] 3 2
17
18$dimnames
19$dimnames$Vote.for.X
20[1] "Yes" "No" "Not Sure"
21
22$dimnames$Vote.for.X.Last.Time人称代词
23[1] "Yes" "No"
24
25
26$class
27[1] "table"
⼆、table对象的操作
⼀个必须要掌握的操作,addmargins
1> addmargins(cttab)
2 Vote.for.X.Last.Time
3Vote.for.X Yes No Sum
i will always love you 歌词4 Yes 1 1 2
5 No 0 2 2
元音字母和辅音字母
6 Not Sure 1 0 1
7 Sum 2 3 5
下⾯取出各维度的名字,也就是各个的⽔平
1> dimnames(cttab)
2$Vote.for.X
3[1] "Yes" "No" "Not Sure"
4
5$Vote.for.X.Last.Time
6[1] "Yes" "No"
下⾯提取感兴趣的⼦表:subtable 类⽐ subt
subtable(tbl,subnames) tbl 感兴趣的表,subnames ⼀个类表,列出⾃⼰各个维度感兴趣的⽔平, subtable 实现如下
快乐英语
1subtable <- function(tbl, subnames) {
2 #将 table 转换称 array 获得 table ⾥⾯的所有元素
3 tblarray <- unclass(tbl)
4
托福拼分5 #将 tblarray 以及 subnames 组合到⼀个list中
6 dcargs <- list(tblarray)
7 ndims <- length(subnames)
8 for(i in 1:ndims) {
9 dcargs[[i+1]] <- subnames[[i]]
10 }
11
12 #等价与执⾏ dcargs[[1]][dcargs[[2]][i], dcargs[[3]][j]] i,j 取遍所有该属性的元素
13 subarray <- do.call("[", dcargs)
14
15 #对list中的每⼀个属性调⽤ length
16 dims <- lapply(subnames, length)
yesterday once more mp317 subtbl <- array(subarray, dims, dimnames = subnames)
18 class(subtbl) <- "table"
19 return(subtbl)
20}
下⾯给出⼀个例⼦:可能很有⽤的
1> as.data.frame(cttab)
2 Vote.for.X Vote.for.X.Last.Time Freq
3 1 Yes Yes 1
4 2 No Yes 0
2013山东高考语文
5 3 Not Sure Yes 1
6 4 Yes No 1
7 5 No No 2
8 6 Not Sure No 0
tabdom 计算table的统计频率
1tabdom <- function(tbl, k) {
pharma2 tbldf <- as.data.frame(tbl)
3 freqord <- order(tabldf$Freq, decreasing=TRUE)
4 dom <- tbldf[freqord, ][1:k]
5 return(dom)
6}
注意:aggregate() 函数 cut() 函数