【问题标题】:How to compute conditional Mode in R?如何在 R 中计算条件模式?
【发布时间】:2011-11-03 08:45:07
【问题描述】:

我有一个包含 11 列和 100000 行(例如)的大型数据集,其中我的值是 1、2、3、4。其中 4 是缺失值。我需要的是计算模式。我正在使用以下数据和函数

ac<-matrix(c("4","4","4","4","4","4","4","3","3","4","4"), nrow=1, ncol=11)  

m<-as.matrix(apply(ac, 1, Mode))

如果我使用上面的命令,那么它会给我“4”作为模式,我不需要。我希望 Mode 省略 4 并将“3”显示为 Mode,因为 4 是缺失值。

提前致谢。

【问题讨论】:

    标签: r mode


    【解决方案1】:

    一种方法(虽然我不太确定它的性能):

    tcnt<-table(ac, exclude="4")
    actualmode<-names(tcnt)[which.max(tcnt)]
    

    这是用于查找整体模式的代码,但它很容易适应在行内查找。 或者,根据 Thomas Lumley 对 R 邮件列表中的一个老问题的回答,一个单行者:

    names(sort(-table(ac, exclude="4")))[1]
    

    【讨论】:

      【解决方案2】:

      R 有一个强大的机制来处理缺失值。您可以使用 NA 表示缺失值,并且许多 R 函数都支持处理 NA 值。

      用随机数创建一个小矩阵:

      set.seed(123)
      m <- matrix(sample(1:4, 12, replace=TRUE), ncol=3)
      m
           [,1] [,2] [,3]
      [1,]    2    4    3
      [2,]    4    1    2
      [3,]    2    3    4
      [4,]    4    4    2
      

      由于您用值 4 表示缺失,因此您可以用 NA 替换每个匹配项:

      m[m==4] <- NA
      m
      
           [,1] [,2] [,3]
      [1,]    2   NA    3
      [2,]   NA    1    2
      [3,]    2    3   NA
      [4,]   NA   NA    2
      

      例如计算平均值:

      mean(m[1, ], na.rm=TRUE)
      [1] 2.5
      
      apply(m, 1, mean, na.rm=TRUE)
      [1] 2.5 1.5 2.5 2.0
      

      要计算众数,可以使用包prettyR中的函数Mode:(注意,在这个非常小的数据集中,只有第4行有唯一的众数:

      apply(m, 1, Mode, na.rm=TRUE)
      [1] ">1 mode" ">1 mode" ">1 mode" "2"     
      

      【讨论】:

        猜你喜欢
        • 2013-08-19
        • 2017-12-07
        • 2016-05-12
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        • 2019-11-06
        • 2020-04-24
        相关资源
        最近更新 更多