2016-03-08 40 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