如何在R中查找数据行中变量/向量的众数

3

有人知道如何在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 

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

4

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 方法只显示一个值)


1

对于并列的情况,选择最小值的解决方案如下:

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

这将返回:

[1] 5

1

在绑定值相同时使用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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接