使用带多个向量的数据框的子集

时间:2016-03-08 14:45:16

标签: r dataframe subset

我有一个由来自不同实验/条件的数据(样本)组成的大型数据集。我已经制作了一个数据框(Data_Design),我在其中为每个样本分配了experiment.nr和condition。

> 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 / CondA,Exp2 / CondB,Exp3 / CondA或Exp3 / CondB。

然而,到目前为止,我没有得到它的工作。我想通过分配&#34;条件&#34;我做错了什么。和&#34;实验&#34;,我不应该使用矢量?

有没有人有好的建议/例子?

1 个答案:

答案 0 :(得分: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