簡體   English   中英

R data.table按位置分組

[英]R data.table group by where

我在R data.table中具有以下內容:

  id | status
=============
   1 |      A
   1 |      B
   2 |      A
   2 |      B
   3 |      A
   4 |      A
   5 |      B

我只想顯示按id分組的具有A而不是B的行。因此結果將是這樣的:

  id | status
=============
   3 |      A
   4 |      A

到目前為止,我有這個:

dt[, sum(status == "A") > 0 && sum(status == "B") == 0, by = id]

這讓我:

  id | status
=============
   1 |  FALSE
   2 |  FALSE
   3 |   TRUE
   4 |   TRUE
   5 |  FALSE

我認為這是對的,但是我不知道如何獲取所需的行。 我是在正確的軌道上嗎,還是我完全以錯誤的方式思考了它?

在此示例中(我假設是簡化的),您可以過濾具有B的行,然后將其反連接回原始數據

dt[ !dt[ status == "B" ], on = "id" ]

#    id status
# 1:  3      A
# 2:  4      A

這行得通,因為

dt[ status == "B"]

給出具有B的'id'。 這些是您要從結果集中排除的結果,可以通過反dt[ !dt[ ] on = "" ]來實現( dt[ !dt[ ] on = "" ]表示法)


如果您的數據更復雜,則可以在此邏輯中添加一些額外的過濾器,以首先過濾所需的值,例如

dt[status == "A"][ !dt[ status == "B" ], on = "id" ]

將確保您返回的結果將包含具有A而不是B的ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM