2014-06-16 180 views
-2

我有一个数据框,其中包含不同基因表达水平的列和列,包括该基因属于哪个时间点的哪个时间点&。我现在想获得对应于特定的基因组和基因表达值:在R中基于两列值对数据框进行子集

cpm[cpm$group=="dysglyc",colnames(cpm)==gene] 

不过,我也想包括在一定的时间点:

cpm[cpm$group=="dysglyc" && cpm$timepoint=="A1",colnames(cpm)==gene] 

这不工作...有人可以帮忙吗?

+0

与一个&那将做它。 – droopy

+3

尝试'cpm [cpm $ group ==“dysglyc”&cpm $ timepoint ==“A1”,“gene”]' –

+1

分别运行每个条件表达式以查看整个表达式的哪个部分不是按预期工作。运行'cpm $ group =='dysglyc“','cpm $ timepoint ==”A1“',和'cpm $ group ==”dysglyc“&& cpm $ timepoint ==”A1“'看看它们是否返回逻辑你期望的向量。当你发布一个问题时,请不要只说“它不工作” - 你应该描述发生了什么,以及你的期望。一个可重复的例子也可以帮助我们帮助你。 – jbaums

回答

1

我强烈建议您使用data.table库来使用这种类型的数据库,并在grouptimepoint上都索引您的data.frame。你可以像这样实现:

cpm = data.table(cmp) # Convert to data.table 
setkeyv(cpm, c("group", "timepoint")) # Set indexing variables. 

然后你可以很容易地子集使用i表达data.table。例如: -

cpm["dysglyc"] # Pull everything dysglyc 
cpm[J("dysglyc", "A1")] # Pull everything group=dysglyc and timepoint=A1 
cpm[J("dysglyc", "A1"), gene] # Use column gene within this subset etc. 

可以开始使用可作为vignette('data.table')data.table的小插曲。如果你有一个庞大的数据集并需要做一堆groupby或split-apply-combine操作,那么这个软件包会是一个额外的好处。

+0

我很久没有找过这样的东西了!谢谢。 – user3236594

相关问题