R:过滤数据集为10个最高均值,至少有三个数据点

时间:2014-02-01 07:25:03

标签: r filter plot dataset

我有一个大数据集,只想制作一小部分的箱形图。我只想绘制具有10个最高平均值的列,这些平均值至少有三个数据点(因为它是一个稀疏矩阵),按降序排列。

更新:它实际上不是稀疏矩阵。这只是一个比喻,因为有很多新的NAs)

我的数据集包含一个标题(如此命名的列)和整数数字正值,但正如我所说的很多新的。

解决方案:

通过这里提供的帮助和进一步的研究,我得出了以下解决方案。

> barcol<-unlist(sapply(1:N, function(j) sum(!is.na(data[,j]))>2) )
> newdata<-data[,barcol]
> newdata.mean <- colMeans(newdata, na.rm=TRUE)
> newdata.sorted <- newdata[,names(sort(newdata.mean, decreasing=TRUE))]

然后是平均十字线的箱线图。

> boxplot(newdata.sorted[,1:10], ylim = c(0, 10))
> points(newdata.mean[1:10], pch = 13)

1 个答案:

答案 0 :(得分:0)

提取感兴趣的列。
编辑:修复一切,最后,我当然希望。对于这个简化示例,我拒绝少于两个非NA值的列。

Rgames> set.seed(1)
Rgames> data<-matrix(NA,4,4)
Rgames> data[sample(1:16,13)]<-sample(10:20,13,rep=TRUE)
Rgames> data
     [,1] [,2] [,3] [,4]
[1,]   12   19   17   11
[2,]   16   NA   19   17
[3,]   NA   12   10   12
[4,]   NA   20   14   16
Rgames> barcol<-unlist(sapply(1:4, function(j) sum(!is.na(data[,j]))>2) )   
Rgames> newdata<-data[,barcol]
Rgames> meancol <- order(colMeans(newdata,na.rm=TRUE))
Rgames> newdata
     [,1] [,2] [,3]
[1,]   19   17   11
[2,]   NA   19   17
[3,]   12   10   12
[4,]   20   14   16
Rgames> meancol
[1] 3 2 1

最后的结果meancol给出了三个最大列均值的索引,尽管是相反的顺序。如果您有很多列,请使用order

返回的最后10个索引