2013-11-14 40 views
1

我有以下格式的數據幀和我想橫製表表:如何不放棄R交叉表中的因子水平?

T1 T2 
NN NF 
FF FF 
NF FF 
NN NN 
NN FF 
NF NF 
NF NF 
FF FF 

我可以通過使用表()函數

表中創建一個簡單的交叉製表表(T1, T2) 這給了我下面的輸出:

FF FN NF NN 
FF 2 0 0 0 
FN 0 0 0 0 
NF 1 0 2 0 

然而因子水平NN默認情況下刪除。有沒有一種方法可以保留表中的NN級別。這將表輸出的樣子:

FF FN NF NN 
FF 2 0 0 0 
FN 0 0 0 0 
NF 1 0 2 0 
NN 0 0 0 0 

編輯:

dput(dataframe) gives: 

    structure(list(T1 = structure(c(3L, 1L, 2L, 3L, 3L, 2L), .Label = c("FF", 
    "NF", "NN"), class = "factor"), T2 = structure(c(2L, 1L, 1L, 
    3L, 1L, 2L), .Label = c("FF", "NF", "NN"), class = "factor")), .Names = c("T1", 
    "T2"), row.names = c(NA, 6L), class = "data.frame") 
+1

請向我們展示您的數據框的dput(head(。))。 –

+0

什麼是「類(T1)」和「類(T2)」?我認爲'table'不會降級,除非指定'exclude'。 –

+0

@BlueMagister,我在編輯 – Arihant

回答

2

的問題是,「FN」是不是在你的輸入數據中列出。您可以通過調用levels()來解決此問題,並通知R它其中一個關卡,它只是一個在您的數據集中沒有任何觀察結果的關卡。例如,

dframe <- read.table(text=" T1 T2 
NN NF 
FF FF 
NF FF 
NN NN 
NN FF 
NF NF 
NF NF 
FF FF", header=T) 

levels(dframe$T1) <- c("FF", "NF", "NN", "FN") 
levels(dframe$T2) <- c("FF", "NF", "NN", "FN") 
with(dframe, table(T1,T2)) 
    T2 
T1 FF NF NN FN 
    FF 2 0 0 0 
    NF 1 2 0 0 
    NN 1 1 1 0 
    FN 0 0 0 0 

一個特別說明:你在這裏覆蓋原來的水平,所以你需要把新的,不存在,水平最後,否則R將打電話給你的「NF」級別「FN」和導致各種問題。

+0

謝謝!這不是第一次讓我陷入困境。 – Arihant

+1

不客氣,@Arihant;他們很棘手。注意最後添加的「特別提示」。您可能希望在更改關卡之前先調用「關卡等級(T1)」(等)*,以便您可以直觀地檢查關卡並確保您沒有無意中改變了您不想要的內容。 – gung