首页 > 解决方案 > 哪一组满足条件 a < b < c 取决于条件

问题描述

我的标题可能不是很丰富,但这是一个暴露我的问题的例子:

我有这个数据框:

df=data.frame(cond1=c(1,1,1,2,2,2,3,3,3,1,1,1,2,2,2,3,3,3),
              group=c("F","V","M","F","V","M","F","V","M","F","V","M","F","V","M","F","V","M"),
              gene=c("A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B"),
              value=c(1,2,3,4,5,6,7,8,9,1,3,2,4,3,2,2,3,4))
df
       cond1 group gene value
    1      1     F    A     1
    2      1     V    A     2
    3      1     M    A     3
    4      2     F    A     4
    5      2     V    A     5
    6      2     M    A     6
    7      3     F    A     7
    8      3     V    A     8
    9      3     M    A     9
    10     1     F    B     1
    11     1     V    B     3
    12     1     M    B     2
    13     2     F    B     4
    14     2     V    B     3
    15     2     M    B     2
    16     3     F    B     2
    17     3     V    B     3
    18     3     M    B     4

我想获得的是对于每个基因,有多少不同的 cond1 的总和,其对应于 F 组的值小于它们对应于 V 的值,它们对应于 M 的值。

在前 3 行中,我们位于 cond1 的基因 A 中。对应于组 F=1、V=2、M=3 的值。因此,对于 cond1=1 组的 A 基因,F<V<M。

我对基因 A 的预期输出是 3,因为所有 cond1 组的值都满足 F<V<M。我对基因 B 的预期输出是 1,因为只有 cond1=3 组满足 F<V<M 的值。

理想情况下,我想要的输出是一个带有基因的数据框和 cond1 的总和,而不是满足我的标准:

  gene count
1    A     3
2    B     1

如果您能给我提供有关如何进行的任何提示,我将不胜感激

标签: r

解决方案


检查所有数据是否按递增顺序排列,并计算每个数据存在多少这样的值gene

library(dplyr)

df %>%
  #If the data is not ordered, order it using arrange
  #arrange(gene, cond1, match(group, c('F', 'V', 'M'))) %>%
  group_by(gene, cond1) %>%
  summarise(cond = all(diff(value) > 0)) %>%
  summarise(count = sum(cond))

#  gene  count
#  <chr> <int>
#1 A         3
#2 B         1

推荐阅读