【问题标题】:How to find mode across variables/vectors within a data row in R如何在 R 中的数据行中跨变量/向量查找模式
【发布时间】:2013-01-06 23:57:51
【问题描述】:

有谁知道如何找到模式(R 中单个案例的变量中最常见的模式?

例如,如果我有关于最喜欢的水果类型 (x) 的数据,则在调查中对每个受访者 (id) 询问了九次 (x1-x9)。如果我想在前五次询问中找到每个测试对象的模态响应,我将如何在 R 中编程?

更简洁,下面是示例数据,我如何在每个案例中找到 MODE?

 id  x1  x2  x3  x4  x5  MODE(x1-x5)?  
  1  3   5   6   4   5   5   
  2  7   4   7   4   7   7  
  3  3   4   4   4   3   4  
  4  3   2   2   2   3   2 

【问题讨论】:

  • 您的示例数据和解释不匹配。在您的示例 data 中,id 在哪里,您的列 v1-v5 是否应该被标记为 x1-x5
  • 它不会出现在您的示例数据中,但任何合理的解决方案都需要知道您打算如何处理平局。
  • c(3,2,2,2,3)的模式是7?
  • @ML,已修复,谢谢。 @乔兰;可能会标记并进一步评估(实际数据比示例具有更多先验信息)。

标签: r average


【解决方案1】:

modeest 包为单峰单变量数据提供了多种模式估计器。

这有一个函数mfv 来返回最频繁的值,或者(如?mfv 所述)使用`mlv(..., method = 'discrete') 可能更好

library(modeest)


## assuming your data is in the data.frame dd

apply(dd[,2:6], 1,mfv)
[1] 5 7 4 2
## or
apply(dd[,2:6], 1,mlv, method = 'discrete')
[[1]]
Mode (most frequent value): 5 
Bickel's modal skewness: -0.2 
Call: mlv.integer(x = newX[, i], method = "discrete") 

[[2]]
Mode (most frequent value): 7 
Bickel's modal skewness: -0.4 
Call: mlv.integer(x = newX[, i], method = "discrete") 

[[3]]
Mode (most frequent value): 4 
Bickel's modal skewness: -0.4 
Call: mlv.integer(x = newX[, i], method = "discrete") 

[[4]]
Mode (most frequent value): 2 
Bickel's modal skewness: 0.4 
Call: mlv.integer(x = newX[, i], method = "discrete") 

现在,如果您的联系最为频繁,那么您需要考虑您想要什么。
mfvmlv.integer 都将返回所有最常见的值。 (虽然 print 方法只显示一个值)

【讨论】:

    【解决方案2】:

    为平局选择最低值的解决方案由下式给出:

    modeStat = function(vals) {
      return(as.numeric(names(which.max(table(vals)))))
    }
    modeStat(c(1,3,5,6,4,5))
    

    这会返回:

    [1] 5
    

    【讨论】:

      【解决方案3】:

      在关系上使用mean,并返回一个向量:

      > x[-7]
      ##   x v1 v2 v3 v4 v5
      ## 1 1  3  4  5  4  5
      ## 2 2  7  4  7  4  7
      ## 3 3  3  4  4  4  3
      ## 4 4  3  2  2  2  3
      

      这与您的问题中的数据不完全相同。第一行已更改为引入平局。

      require(functional)
      apply(x[2:6], 1, Compose(table,
                               function(i) i==max(i),
                               which,
                               names,
                               as.numeric,
                               mean))
      
      ## [1] 4.5 7.0 4.0 2.0
      

      mean 替换为您需要的任何打破平局的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 2011-07-23
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        相关资源
        最近更新 更多