簡體   English   中英

R:按多個 OR 條件過濾

[英]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省去了對lengthunique兩次調用。

暫無
暫無

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

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