當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R table 交叉表和表格創建


R語言 table 位於 base 包(package)。

說明

table 使用交叉分類因子來構建每個因子級別組合的計數列聯表。

用法

table(...,
      exclude = if (useNA == "no") c(NA, NaN),
      useNA = c("no", "ifany", "always"),
      dnn = list.names(...), deparse.level = 1)

as.table(x, ...)
is.table(x)

## S3 method for class 'table'
as.data.frame(x, row.names = NULL, ...,
              responseName = "Freq", stringsAsFactors = TRUE,
              sep = "", base = list(LETTERS))

參數

...

一個或多個可以被解釋為因子(包括數字或字符串)的對象,或者其組件可以被解釋為因子的list(例如 DataFrame )。 (對於 as.table ,傳遞給特定方法的參數;對於 as.data.frame ,未使用。)

exclude

要刪除 ... 中所有因子的級別。如果它不包含NA並且未指定useNA,則意味著useNA = "ifany"。有關非因子參數的解釋,請參閱“詳細信息”。

useNA

是否在表中包含NA 值。查看具體信息'。可以縮寫。

dnn

為結果中的維度指定的名稱(dimnames 名稱)。

deparse.level

控製默認dnn 的構造方式。查看具體信息'。

x

任意的R對象,或從類繼承的對象"table"為了as.data.frame方法。注意as.data.frame.table(x, *)可以為非表顯式調用x對於“reshaping”arrays.

row.names

給出 DataFrame 的行名稱的字符向量。

responseName

用於表條目列的名稱,通常是計數。

stringsAsFactors

邏輯:分類因子應該作為因子(默認)還是字符向量返回?

sep , base

傳遞給provideDimnames

細節

如果未提供參數 dnn,則調用內部函數 list.names 來計算“dimname 名稱”,如下所示: 如果 ... 是一個帶有自己的 names()list,則使用這些 names 。否則,如果 ... 中的參數已命名,則使用這些名稱。對於其餘參數,deparse.level = 0 給出一個空名稱,deparse.level = 1 使用提供的參數(如果它是符號),deparse.level = 2 將解析該參數。

僅當指定 exclude(即非默認情況下)且非空時,table 才可能會降低因子參數的級別。

useNA 控製表是否包含 NA 值的計數:允許的值對應於從不 ( "no" ),僅當計數為正數 ( "ifany" ) 甚至零計數 ( "always" ) 時。請注意兩種不同類型的 NA 的 “pathological” 情況,它們的處理方式有所不同,具體取決於 useNAexclude ,請參閱下麵“示例:”中的 d.patho

excludeuseNA 都在“all or none” 基礎上運行。如果要單獨控製多路表的維度,請使用 factoraddNA 修改每個參數。

非因子論證a被脅迫通過factor(a, exclude=exclude)。自從R3.4.0,小心不是計算排除的值(它們包含在NA計數,之前)。

"table"summary 方法(用於由 tablextabs 創建的對象)提供基本信息並執行因子獨立性的卡方檢驗(請注意,函數 chisq.test 目前僅處理二維表)。

table() 返回列聯表、"table" 類的對象、整數值數組。請注意,與 S 不同,結果始終是 array ,如果給出一個因子,則結果是一維數組。

as.tableis.table 分別強製和測試列聯表。

從類 "table" 繼承的對象的 as.data.frame 方法可用於將列聯表的基於數組的表示轉換為包含分類因子和相應條目的 DataFrame (後者作為由 responseName 命名的組件) 。這是 xtabs 的逆。

例子

require(stats) # for rpois and xtabs
## Simple frequency distribution
table(rpois(100, 5))
## Check the design:
with(warpbreaks, table(wool, tension))
table(state.division, state.region)

# simple two-way contingency table
with(airquality, table(cut(Temp, quantile(Temp)), Month))

a <- letters[1:3]
table(a, sample(a))                    # dnn is c("a", "")
table(a, sample(a), dnn = NULL)        # dimnames() have no names
table(a, sample(a), deparse.level = 0) # dnn is c("", "")
table(a, sample(a), deparse.level = 2) # dnn is c("a", "sample(a)")

## xtabs() <-> as.data.frame.table() :
UCBAdmissions ## already a contingency table
DF <- as.data.frame(UCBAdmissions)
class(tab <- xtabs(Freq ~ ., DF)) # xtabs & table
## tab *is* "the same" as the original table:
all(tab == UCBAdmissions)
all.equal(dimnames(tab), dimnames(UCBAdmissions))

a <- rep(c(NA, 1/0:3), 10)
table(a)                 # does not report NA's
table(a, exclude = NULL) # reports NA's
b <- factor(rep(c("A","B","C"), 10))
table(b)
table(b, exclude = "B")
d <- factor(rep(c("A","B","C"), 10), levels = c("A","B","C","D","E"))
table(d, exclude = "B")
print(table(b, d), zero.print = ".")

## NA counting:
is.na(d) <- 3:4
d. <- addNA(d)
d.[1:7]
table(d.) # ", exclude = NULL" is not needed
## i.e., if you want to count the NA's of 'd', use
table(d, useNA = "ifany")

## "pathological" case:
d.patho <- addNA(c(1,NA,1:2,1:3))[-7]; is.na(d.patho) <- 3:4
d.patho
## just 3 consecutive NA's ? --- well, have *two* kinds of NAs here :
as.integer(d.patho) # 1 4 NA NA 1 2
##
## In R >= 3.4.0, table() allows to differentiate:
table(d.patho)                   # counts the "unusual" NA
table(d.patho, useNA = "ifany")  # counts all three
table(d.patho, exclude = NULL)   #  (ditto)
table(d.patho, exclude = NA)     # counts none

## Two-way tables with NA counts. The 3rd variant is absurd, but shows
## something that cannot be done using exclude or useNA.
with(airquality,
   table(OzHi = Ozone > 80, Month, useNA = "ifany"))
with(airquality,
   table(OzHi = Ozone > 80, Month, useNA = "always"))
with(airquality,
   table(OzHi = Ozone > 80, addNA(Month)))

參考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

tabulate 是底層函數,允許更精細的控製。

使用ftable 打印(以及更多)多維表。 margin.tableprop.tableaddmargins

addNA 用於以 NA 作為水平構建因子。

xtabs 用於使用公式接口對數據幀進行交叉製表。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Cross Tabulation and Table Creation。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。