基于两列值在R中子集数据帧

时间:2014-06-16 07:52:38

标签: r dataframe subset

我有一个数据框,其中不同的基因表达水平为列,而列包括哪个时间点&该基因属于哪一组。我现在想获得对应于某个基因和组的基因表达值:

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

但是,我还想包括一个特定的时间点:

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

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

1 个答案:

答案 0 :(得分: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表达式轻松进行子集化。 E.g:

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.

您可以data.table开始使用vignette('data.table')的小插图。如果你有一个庞大的数据集并且需要做一堆groupby或split-apply-combine操作,那么这个包将是一个额外的奖励。