![](/img/trans.png)
[英]Get top k records per group, where k differs by group, in 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.