簡體   English   中英

根據幾列的值從R中的data.table中刪除行

[英]Remove rows from data.table in R based on values of several columns

我在R中有一個data.table,它有幾個id和一個值。 對於每個ID組合,有幾行。 如果這些行中的一行在“值”列中包含NA,我想刪除具有此組合ID的所有行。 例如,在下表中,我想刪除id1 == 2id2 == 1所有行。

如果我只有一個id,我會做dat[!(id1 %in% dat[is.na(value),id1])] 在示例中,這將刪除i1 == 2的所有行。但是,我沒有設置包含多個列。

dat <- data.table(id1 = c(1,1,2,2,2,2),
                  id2 = c(1,2,1,2,3,1),
                  value = c(5,3,NA,6,7,3))

如果要檢查每個id1id2組合,如果任何值為NA ,然后刪除整個組合,則可以為每個組插入一個if語句,並僅在該語句返回TRUE檢索結果(使用.SD )。

dat[, if(!anyNA(value)) .SD, by = .(id1, id2)]
#    id1 id2 value
# 1:   1   1     5
# 2:   1   2     3
# 3:   2   2     6
# 4:   2   3     7

或者類似地,

dat[, if(all(!is.na(value))) .SD, by = .(id1, id2)]

暫無
暫無

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

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