如何根据多个条件选择/计算列中的行

时间:2017-08-08 08:35:02

标签: r if-statement count conditional-statements criteria

我有一个数据框(1百万个数据)看起来像这样:(治疗有多个可能的字符变量,我只是简化了问题)

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与exclusif治疗,换句话说保持身份证,只有一次治疗,即使是几次。之后,我想总结每次治疗的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

我有任何ida如何解决这个问题,可能是循环中的循环,但我是R的初学者。

1 个答案:

答案 0 :(得分:3)

我们可以使用uniqueN来检查每个“ID”和子集的唯一“处理”数量

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