【发布时间】:2016-10-21 15:17:54
【问题描述】:
我正在努力想出一个可行的解决方案来解决这个看似相当简单的问题。我有一个包含数据和因子的数据框,我想使用这些因子来决定需要从其他数据点中减去哪些数据点以生成具有比较值的新数据框。
数据框是这样的:
str(means)
Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame': 32 obs. of 5 variables:
$ rat : Factor w/ 8 levels "Rat1","Rat2",..: 1 1 1 1 2 2 2 2 3 3 ...
$ gene : Factor w/ 4 levels "gene1","gene2",..: 1 2 3 4 1 2 3 4 1 2 ...
$ gene_category: Factor w/ 2 levels "control","experimental": 2 2 1 1 2 2 1 1 2 2 ...
$ timepoint1 : num 23.4 18.3 42.1 40.1 25.3 ...
$ timepoint2 : num 23.5 18.4 41.5 39.9 22.8 ...
> head(means)
Source: local data frame [6 x 5]
Groups: rat, gene [6]
rat gene gene_category timepoint1 timepoint2
(fctr) (fctr) (fctr) (dbl) (dbl)
1 Rat1 gene1 experimental 23.36667 23.49667
2 Rat1 gene2 experimental 18.26000 18.38000
3 Rat1 gene3 control 42.05500 41.45000
4 Rat1 gene4 control 40.08667 39.89500
5 Rat2 gene1 experimental 25.29333 22.83000
6 Rat2 gene2 experimental 19.72667 19.19333
对于每只大鼠(总共 8 只大鼠),我想从“实验”基因值(基因 1 和 2)中减去“对照”基因值(基因 3 和 4)。我需要迭代地执行此操作,因此每个实验基因值必须从中减去每个对照基因值(在每只大鼠内,但不是在大鼠之间)。应该对每个时间点列进行上述操作。
我一直在摆弄使用 dplyr 的解决方案,我已经完成了分组,但我不知道如何做剩下的:
diffs <- means %>% group_by(rat, gene, gene_category) %>% here_is_where_i_don't_know_what_to_do)
There is a solution here to a similar problem here 但我认为它会给我所有可能的配对操作,这不是我想要的。它也只涉及两个因素,而我需要考虑三个因素。
Here's another solution to a similar problem,但同样有一些事情使它不太理想。它只处理一个因素,我不确定如何将其应用于具有三个因素和两个数据向量的数据集。
我知道在进行配对比较以确定统计显着性(多个 t 检验、ANOVA、MANOVA 等)时,此问题已得到解决,但我熟悉的用于执行这些测试的包/基本统计函数将此基本操作保留在引擎盖下。我想要一个简单的解决方案,使用 base R 或 dplyr/plyr/reshape2 等尽可能少的循环。
【问题讨论】:
-
您能否提供一些数据的输出?
-
我不太清楚你的计算。您是否需要将
gene1和gene2的平均值以及gene3和gene4的平均值相减,或者它们是配对的(gene1和gene3,...)? -
@user124123 在上面添加了更清晰的数据框表示。
-
@bVa 从这个意义上说,它们不是配对的。基因 1 和 2 是实验基因,基因 3 和 4 是对照基因。我需要从实验基因值中减去控制基因值的实验基因和对照基因之间的所有可能比较。这些值已经是三次测量的平均值,所以我不想再次平均它们。这有意义吗?
-
因此您希望每只大鼠有 4 个结果:gene1 - gene3 |基因1 - 基因4 |基因2 - 基因3 |基因2 - 基因4?