我有一个数据框(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的初学者。
答案 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