代码之家  ›  专栏  ›  技术社区  ›  Kaja

表返回频率为空[重复]的元素

  •  0
  • Kaja  · 技术社区  · 9 年前

    我想总结一下我的数据帧(实际上是数据帧中每个元素的频率)

    我用 table 完成此项工作的功能:

    a<-table(EndResult$Masstab)
    a
    

    但它返回了一些空频繁元素!

                                                     .X20_TemperaturCPU 
                                                                    0 
                                  .Akt_Fuellprogramm.0..Rezept_Nummer 
                                                                  534 
                       .Anwahl_Programm_Sorte.Programmnummer_Angef.0. 
                                                                  510 
                         .Anwahl_Programm_Sorte.Sortennummer_Angef.0. 
                                                                  180
    

    如果没有这样的元素,那么实际上不应该显示这个元素。

    如果我正在寻找这样的元素:

    EndResult[(EndResult$Masstab==".X20_TemperaturCPU"),]
    

    它返回给我:

    [1] Masstab Mf1MF2  MF1OF   MF2OF   MF1     MF2     OF     
    <0 Zeilen> (oder row.names mit Länge 0)
    

    为什么给我这个表函数一个频率为空的元素?

    1 回复  |  直到 9 年前
        1
  •  1
  •   TARehman    9 年前

    R基于在您请求频率的变量中找到的所有因子水平向您提供输出。例如,考虑以下情况。

    > table(c("A","A","C","D","E","D","D","E","C"))
    
    A C D E 
    2 2 3 2 
    
    > fac_version <- factor(x = c(1,1,3,4,5,4,4,5,3),
    +                       levels = 1:5,
    +                       labels = LETTERS[1:5])
    > table(fac_version)
    fac_version
    A B C D E 
    2 0 2 3 2
    

    如您所见,通过声明一个因子,table命令将返回所有可能的因子级别,包括具有零值的因子级别。

    您可能需要设置选项 stringsAsFactors 在程序开始时为FALSE。否则,R会将字符串强制转换为因子,我可以想象这会在以后引起这个问题(例如,如果您在运行频率表之前有一组字符串被过滤掉的行,那么您仍然会得到计数为零的返回行)。

    另一种方法是创建表并过滤掉零值。这样地:

    > table(fac_version)[table(fac_version) > 0]
    fac_version
    A C D E 
    2 2 3 2