我有一个包含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是缺失值。
提前致谢。
答案 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]