[英]select rows based on multiple criteria in R
我有一個類似於下面的巨大數據集:
Df <- data.frame("Candidate ID" = c(1042, 1042, 1113, 1113, 1146, 1277, 1381, 1381, 1402, 1402),
"Application ID" = c(1040, 13006, 1111, 1125, 1144, 1274, 41, 61, 64, 65),
"Question" = c("Yes", "Yes", "No","Yes", "Yes","No", "No", "No","Yes", "No"))
背景:候選人可以申請多個職位申請,每次都會收到不同的申請 ID。 一個候選人 ID 也可以申請多達 25 個職位申請,即申請 25 次不同的時間。 在我的簡化示例中,最大值為 2。
我想提取所有問題的答案都是“是”的候選人 ID。 在示例中,我只想提取候選 ID 1042 和 1146。如何在 R 中執行此操作?
我檢查了 StackOverflow 並找不到匹配的答案,也許也是描述問題的困難。 至少我努力創建了一個最小的可重復示例,以便於幫助我。
這是否有效:
library(dplyr)
Df %>% group_by(Candidate.ID) %>% filter(all(Question == 'Yes'))
# A tibble: 3 x 3
# Groups: Candidate.ID [2]
Candidate.ID Application.ID Question
<dbl> <dbl> <chr>
1 1042 1040 Yes
2 1042 13006 Yes
3 1146 1144 Yes
帶有subset
base R
的選項
setdiff
獲取在“問題”中具有“是”值而不是任何“否”的unique
“Candidate.ID”%in%
和 'Candidate.ID' 的整列,用於對 'Candidate.ID' 在 'Question' 中只有 'Yes' 值的行進行subset
subset(Df, Candidate.ID %in% setdiff(Candidate.ID[Question == 'Yes'],
Candidate.ID[Question == "No"]))
# Candidate.ID Application.ID Question
#1 1042 1040 Yes
#2 1042 13006 Yes
#5 1146 1144 Yes
數據表
df <- data.frame("Candidate ID" = c(1042, 1042, 1113, 1113, 1146, 1277, 1381, 1381, 1402, 1402),
"Application ID" = c(1040, 13006, 1111, 1125, 1144, 1274, 41, 61, 64, 65),
"Question" = c("Yes", "Yes", "No","Yes", "Yes","No", "No", "No","Yes", "No"))
library(data.table)
setDT(df)[, .SD[all(Question == "Yes")], by = Candidate.ID]
#> Candidate.ID Application.ID Question
#> 1: 1042 1040 Yes
#> 2: 1042 13006 Yes
#> 3: 1146 1144 Yes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.