首页 > 解决方案 > 在特定时间点计算每组唯一 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

标签: rdataframefor-loop

解决方案


这可以在不使用循环的情况下实现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

推荐阅读