r - 如何不删除 R 交叉表中的因子水平?

标签 r r-factor

我有一个以下格式的数据框,我想获取交叉表:

 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")

最佳答案

问题是“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”并导致各种各样的问题。

关于r - 如何不删除 R 交叉表中的因子水平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987324/

相关文章:

regex - 具有前瞻性的 R 正则表达式中的贪婪

删除向量中属于另一个向量子串的元素

r - 如何自动排除 Predict.randomForest 中看不见的新因子水平?

r - Shiny - 自定义警告/错误消息?

r - Shiny 的数据表 : Format row depending on two conditions

r - 访问第二级列表

r - R 中因子随时间的变化

R - 如何对比代码因素并在输出摘要中保留有意义的标签

r - 如何在 R 中将因子级别转换为列表

r - 将 sf 转换为未标记的 ppp