如何不放弃R交叉表中的因子水平?

问题描述:

我有以下格式的数据帧和我想横制表表:如何不放弃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

的问题是,“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