2014-12-02 86 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