如何select/根据多个条件计算列中的行数

How to select /count rows in a column based on multiple conditions

我有一个数据框(100万条数据)看起来像这样:(处理有多个可能的字符变量,我只是针对问题进行了简化)

ID              Position            Treatment
--20AxECvv-         0           A
--20AxECvv-         -1          A
--20AxECvv-         -2          A
--h9INKewQf-        0           A
--h9INKewQf-        -1          B
zZU7a@8jN           0           B
QUeSNEXmdB          0           C
QUeSNEXmdB          -1          C
qu72Ql@h79          0           C

我只想保留独享的ID,也就是只用过一次的ID,即使多次处理也保留。之后,我想对每次治疗的 ID 数求和。 结果将是:

ID              Position            Treatment
--20AxECvv-         0           A
--20AxECvv-         -1          A
--20AxECvv-         -2          A
zZU7a@8jN           0           B
QUeSNEXmdB          0           C
QUeSNEXmdB          -1          C   
qu72Ql@h79          0           C

And the sum :
A : 1 
B : 1
C : 2

我知道如何解决这个问题,也许是循环中的循环,但我是 R 的初学者。

我们可以使用 uniqueN 来检查每个 'ID' 和子集的唯一 'Treatment' 的数量

library(data.table)
dt <- setDT(df1)[, if(uniqueN(Treatment)==1) .SD, ID]
dt
#            ID Position Treatment
#1: --20AxECvv-        0         A
#2: --20AxECvv-       -1         A
#3: --20AxECvv-       -2         A
#4:   zZU7a@8jN        0         B
#5:  QUeSNEXmdB        0         C
#6:  QUeSNEXmdB       -1         C
#7:  qu72Ql@h79        0         C

并且我们找到每个“治疗”

的唯一数量 'ID'
dt[, .(Count = uniqueN(ID)), Treatment]
#    Treatment Count
#1:         A     1
#2:         B     1
#3:         C     2