【问题标题】:How to select /count rows in a column based on multiple conditions如何根据多个条件选择/计数列中的行
【发布时间】:2018-01-15 17:27:33
【问题描述】:

我有一个看起来像这样的数据框(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 的初学者。

【问题讨论】:

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


【解决方案1】:

我们可以使用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

【讨论】:

  • 并且知道我该怎么做才能只拥有所有第一个位置的子集(即:每个 id 的最小位置)。有时第一个位置可能是 -2 或 -65。
  • @AnnaCarrere 在这种情况下,setDT(df1)[, .SD[which.min(Position)], ID]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多