r - 哪一组满足条件 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
如果您能给我提供有关如何进行的任何提示,我将不胜感激
解决方案
检查所有数据是否按递增顺序排列,并计算每个数据存在多少这样的值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
推荐阅读
- php - 使用 phpmyadmin XAMPP 时访问被拒绝
- ssis - SSIS - 对源和目标使用不同的凭据
- visual-studio-code - vscode 代码片段中的 const 大小写
- javascript - 在vue js中的单独数组中求和对象值
- node.js - 无法在树莓派上使用 nodeJs 连接到 mongo
- c - 运行多个c文件时编译时错误
- javascript - 如何继续将视频流(webm、vp8)录制到现有文件(使用 C#)?
- c++ - C++ 中的 IF 嵌套
- javascript - 如何向 javascript 中的现有对象添加一组完整的键:值对?
- javascript - 在没有赋值的情况下使用 Javascript 中的表达式是否会自动创建变量?