如何在R中计算条件模式?

时间:2011-08-25 05:05:12

标签: r mode

我有一个包含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”作为模式,我不需要。我希望模式将省略4并将“3”显示为模式,因为4是缺失值。

提前致谢。

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:2)

这样做的一种方式(虽然我对它的表现不太确定):

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

这是用于查找整体模式的代码,但它很容易适应在行内查看。 或者,根据托马斯·拉姆利(Thomas Lumley)在R邮件列表上的一个旧问题的一些答案,一个oneliner:

names(sort(-table(ac, exclude="4")))[1]
相关问题