2014-12-02 88 views
1

我有一个list与33 matrices。这里是一个matrix例如:如何将矩阵排名降低20%?

a <- matrix(c(0.44, 0.33, 0.43, 0.54, 0.42, 0.49, 0.48, 0.51, 0.48, 0.55, 0.35, 0.51, 0.50, 0.34, 0.37), 1,15) 
colnames(a) <- c("ACES4", "AMBV4", "ARCZ6", "BBAS3", "BBDC4", "BRAP4", "BRKM5", "BRTP3", "BRTP4", "CESP5", "CGAS5", "CLSC4", "CMIG3", "CMIG4", "DASA3") 

我需要知道什么是低百分之二十值。在这种情况下,将3值(有15个值,因此有20%是右侧3 ...):

print(a[,c(2,11,14)]) 
AMBV4 CGAS5 CMIG4 
0.33 0.35 0.34 

我如何管理做一次呢?我必须生成与33 matrices相同的list,但只有这些组成部分在每个matrix。必须完成20%而不是3次,因为每个matrixlist的总金额不同。

对不起,这可能是一个愚蠢的问题。感谢您的任何帮助!

回答

1

让我们假设你有2个矩阵,而不是33本。

它可以容易地与lappy上进行:

a <- matrix(c(0.44, 0.33, 0.43, 0.54, 0.42, 0.49, 0.48, 0.51, 0.48, 0.55, 0.35, 0.51, 0.50, 0.34, 0.37), 1,15) 
colnames(a) <- c("ACES4", "AMBV4", "ARCZ6", "BBAS3", "BBDC4", "BRAP4", "BRKM5", "BRTP3", "BRTP4", "CESP5", "CGAS5", "CLSC4", "CMIG3", "CMIG4", "DASA3") 
b <- matrix(c(0.49, 0.33, 0.43, 0.54, 0.62, 0.49, 0.48, 0.51, 0.58, 0.55, 0.35, 0.51, 0.50, 0.34, 0.37), 1,15) 
colnames(b) <- c("ACES4", "AMBV4", "ARCZ6", "BBAS3", "BBDC4", "BRAP4", "BRKM5", "BRTP3", "BRTP4", "CESP5", "CGAS5", "CLSC4", "CMIG3", "CMIG4", "DASA3") 

mylist<-list(a,b) 


c <- lapply(mylist, function(x) { as.matrix(x[ x < quantile(x,0.2)])}) 


    > c 
[[1]] 
    [,1] 
[1,] 0.33 
[2,] 0.35 
[3,] 0.34 

[[2]] 
    [,1] 
[1,] 0.33 
[2,] 0.35 
[3,] 0.34 

> is.matrix(c[[1]]) 
[1] TRUE 
> 

正如可以看到的是产生具有每一个元素是每个单独的矩阵的分钟; 20%的值的列表。此外,每个元素例如c[[1]]是一个矩阵。因此,你将得到一个包含33个矩阵的列表,其中只有20%最小值。

希望它有帮助!

+0

再次感谢你!你能为R的初学者推荐一些好的阅读材料吗?我看到我在这里做了很多基本/愚蠢的问题! – 2014-12-03 00:07:39

+0

欢迎您:)这永远是一种享受:)只要以清晰的方式提问,就像您在此处和之前的问题中所做的那样,问题永远都不会愚蠢。我发现Stack Overflow是一个非常好的学习从初级到高级的地方,相信我在开始时比我的开始时多了10倍'愚蠢'的问题。至于一本书,我过度喜欢两本书:[this](http://www.amazon.co.uk/Machine-Learning-R-Brett-Lantz/dp/1782162143) – LyzandeR 2014-12-03 00:13:44

+0

和[this](http: /www.amazon.co.uk/Applied-Predictive-Modeling-Max-Kuhn/dp/1461468485/ref=sr_1_1?ie=UTF8&qid=1412630080&sr=8-1&keywords=Applied+Predictive+Modeling)。他们两人都是为了机器学习。第一个是关于R的入门级,第二个是稍微先进的。但是,这些都是关于机器学习的,所以我不知道这是否是你感兴趣的东西。我只能推荐我读过的书,说实话,这是我的两本书,我真的觉得它们很棒推荐。 – LyzandeR 2014-12-03 00:15:40

1

基础R

a[a <= quantile(a, 0.2)] 
[1] 0.33 0.35 0.34 

dplyr

library(reshape2) 
library(dplyr) 
b <- as.tbl(melt(a)) 
b %>% 
    filter(value, percent_rank(value) < .2) 
# Source: local data frame [3 x 3] 
# 
# Var1 Var2 value 
#1 1 AMBV4 0.33 
#2 1 CGAS5 0.35 
#3 1 CMIG4 0.34 
+0

感谢您的帮助! – 2014-12-02 23:59:29