r - 在特定时间点计算每组唯一 ID 的数量
问题描述
我试图找出每个基因在不同时间点的参与者数量。我正在尝试使用嵌套的 for 循环来执行此操作,但是,我似乎无法弄清楚。这是我一直在尝试的事情:
IgH_CDR3_post_challenge_unique<- select(IgH_CDR3_post_challenge_unique, cdr3aa, gene, ID, Timepoint)
participant_list <- unique(IgH_CDR3_post_challenge_unique$gene)
time_list<- unique(IgH_CDR3_post_challenge_unique$Timepoint)
for (c in participant_list)
{
for(i in time_list)
{
IgH_CDR3_post_challenge_unique <- filter(IgH_CDR3_post_challenge_unique, Timepoint==time_list[i] )
}
IgH_CDR3_post_challenge_unique$participant_per_gene[IgH_CDR3_post_challenge_unique$gene == c] <- length(unique(IgH_CDR3_post_challenge_unique$ID[IgH_CDR3_post_challenge_unique$gene == c]))
}
我希望循环最终计算每个时间点每个基因的参与者数量。
我的数据看起来像这样:
基因 | 时间点 | ID |
---|---|---|
1 | C0 | SP1 |
2 | C1 | SP2 |
1 | C0 | SP4 |
3 | C0 | SP2 |
解决方案
这可以在不使用循环的情况下实现dplyr
。当数据变大时,循环往往会变得缓慢而繁琐。
首先,使用group_by
按相关列对数据进行分组,然后计算每组中唯一 ID 的数量。
library(dplyr)
> dat %>% group_by(Timepoint, gene) %>% summarise(n = length(unique(ID)))
# A tibble: 2 × 2
Timepoint n
<chr> <int>
1 C0 3
2 C1 1
推荐阅读
- latex - itemize 环境中的居中表
- php - move_uploaded_file() 函数不会将上传的文件保存在服务器上
- validation - 如何使用特定字段组合将表限制为 5 条记录
- r - 更改 R Markdown 中的参考书目样式
- python - 如何选择性地只允许使用烧瓶同时访问几个方法?
- regex - Google Cloud Firestore 安全规则中正确的正则表达式语法是什么?
- javascript - AJAX 忽略 .Net 会话变量
- android - Android执行不同的http请求卡住
- java - java运行时异常的主要目标和原因以及规避java运行时异常的最佳实践
- python - 循环遍历 pandas 分组数据索引