[英]R: filter by multiple OR conditions
我需要通過多個“或”條件過濾 dataframe。 讓我解釋。
我有一個 dataframe (總計),有 100 萬個觀測值。 其中一列 ( id ) 包含從 1 到 6000 的 id 編號。這意味着許多行具有重復的 id 編號。
我之前抽取了 500 個唯一 ID 號的隨機樣本。
random.id <- sample(abc, 500, replace=F)
我想過濾原始數據集中id列與random.id中的任何值匹配的那些行。 換句話說,我想用許多“或”條件進行過濾。 但是由於有 500 個條件,我無法將它們全部輸入。
我試過使用 %in% 運算符。
filtered <- total %>%
filter(id %in% random.id)
如果命令按預期工作,則新過濾的 dataframe 應包含 500 個唯一id值。
length(unique(filtered$id))
不幸的是,這個數字遠低於 500。我重新對random.id進行隨機抽樣,但新 dataframe 中的唯一 ID 的數量始終低於 500。
我應該怎么辦?
你沒有提到abc
來自哪里,但如果它有重復,那么你可能實際上沒有繪制 500 個唯一的 id 號碼。
當您從具有重復項的向量中獲取樣本時,即使您不替換,某些樣本本身也可能是重復的,因為您可能正在采樣相同 id 的不同實例。
如果源分布本身具有重復值,我們可以從樣本中獲取非唯一值而無需替換:
set.seed(0)
sample(c(1,1,2), size = 3, replace = FALSE)
[1] 1 1 2
或使用類似您的示例的內容:
set.seed(0)
abc = sample(1:6000, size = 1E6, replace = TRUE)
length(unique(sample(abc, 500, replace=F)))
[1] 477
length(unique(sample(unique(abc), 500, replace=F)))
[1] 500
由於您使用的是dplyr
,因此這是@Jon Spring 在dplyr
語法中的答案的一個版本。
看起來您的問題與abc
的內容有關。
library(dplyr)
random_id <- sample(1:1000, 500, replace = F)
total <- tibble(id = sample(1:6000, 1e6, replace = T))
filtered <- total %>% filter(id %in% random_id)
n_distinct(filtered$id) # 500
注意: dplyr::n_distinct
省去了對length
和unique
兩次調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.