如何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
我有一个数据框(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