如何在R中进行嵌套子集操作

3
在我的下面的数据中,我试图筛选出具有包含“Monitor”和“Never”的“District”并且具有“No”“Answer”的“Status”的行。
然后,在这些“District”中的每一个中,我只想筛选出“Status”为“Monitor”或“Never”且“Answer”为“No”的行。
期望的输出应该只有第1行、第3行、第10行和最后一行(见下文)。这个可能吗?
我尝试了以下方法(但没有成功):
library(dplyr)
  group_by(DATA, District) %>% 
  filter(Status %in% c("Monitor","Never")  & Answer == "No") %>% 
  ungroup()

DATA <- read.table(h=T, text="
District  Status   Answer
A         Monitor  No    #--> Filter this row
A         Never    Yes
A         Never    No    #--> Filter this row
A         Ever     No
B         Never    Yes
B         Never    No
B         Never    No
C         Former   No
C         Never    No
D         Never    No   #--> Filter this row
D         Monitor  Yes
D         Monitor  No   #--> Filter this row
")
1个回答

7
对于"包括Monitor和Never",我们需要先使用all(.),然后再继续处理您的过滤器的其余部分。
group_by(DATA, District) %>%
  filter(
    all(c("Monitor","Never") %in% Status),
    Status %in% c("Monitor", "Never"),
    Answer == "No"
  ) %>%
  ungroup()
# # A tibble: 4 × 3
#   District Status  Answer
#   <chr>    <chr>   <chr> 
# 1 A        Monitor No    
# 2 A        Never   No    
# 3 D        Never   No    
# 4 D        Monitor No    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接