2016-03-08 61 views
0

我有一個由來自不同實驗/條件的數據(樣本)組成的大型數據集。我製作了一個數據框(Data_Design),其中我將實驗.nr和條件分配給每個樣本。使用具有多個向量的數據幀的子集

> Data 
       Samp1  Samp2  Samp3  Samp4  Samp5  Samp6 
    GeneA  10   4   2   3   2  3  
    GeneB  3   335  12  12   2  23 
    GeneC  5   6   2   3   243  3 
    GeneD  122  132  132  21   22  34 


> Data_Design 
      Exps  Conds 
Samp1  Exp1  CondA  
Samp2  Exp1  CondB  
Samp3  Exp2  CondC  
Samp4  Exp2  CondB  
Samp5  Exp3  CondB 
Samp6  Exp3  CondC 

現在,我想使一個腳本,讓我給的利息作爲輸入(與變量)多次實驗/條件,它將然後提取相應的數據。就像這樣:

> condition <- c("CondA","CondB") 
> experiment <- c("Exp2","Exp3") 

>  Data.new <- Data[, Data_Design$Conds == condition & Data_Design$Exps == experiment] 

結果將被:

> Data.new 
       Samp4  Samp5 
    GeneA  3   2  
    GeneB  12   2   
    GeneC  3   243  
    GeneD  21   22  

在這種情況下,所有選項應該被允許,即EXP2 /康達,EXP2/CondB,EXP3 /康達或EXP3/CondB。

但是,直到現在我沒有得到它的工作。我想通過分配「條件」和「實驗」我做錯了什麼,我不應該使用矢量?

有沒有人有很好的建議/例子?

回答

0

可能有更好的方法來做到這一點,但現在,這是有效的。注意:在Data_Design中,我將所有Samp放在名爲Samp的列中,而不是將它們作爲rownames。

inputs <- expand.grid(experiment, condition, stringsAsFactors = FALSE) 
names(inputs) <- c('Exps', 'Conds') 

inputs <- merge(inputs, Data_Design, by = c('Exps', 'Conds'), all.x = TRUE) 

Data[, inputs$Samp[!is.na(inputs$Samp)]] 
##  Samp4 Samp5 
##GeneA  3  2 
##GeneB 12  2 
##GeneC  3 243 
##GeneD 21 22