我有一个以下格式的数据框,我想得到交叉制表表:
T1 T2
NN NF
FF FF
NF FF
NN NN
NN FF
NF NF
NF NF
FF FF
我可以使用table()函数
创建一个简单的交叉制表表表(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")
答案 0 :(得分: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”并导致各种各样的问题。