![](/img/trans.png)
[英]Filter dataframe within a group with one column meeting an AND condition in R
[英]I want to filter group id's specific conditions meeting on both column and some row value in r
我有樣本數據,我想過濾在type ==N
時從未有過sup
狀態的id's
數量,這意味着我只在切換類型之前選擇status == unsup
的 id,然后選擇從N to P
的數字 id .
例如id==1
在type==N
上從來沒有status==sup
,所以我需要計算 id 1。然后我還想檢查這個 id 是否切換到P
。 但是 id 2 不符合 selected 條件,因為它在type==N
時具有sup
狀態。
id 的 2、5 和 id 7 將不符合條件,因為它們具有status == sup
,而在狀態N
和 id 7 僅在N
時處於NA
上。
data <- data.frame(id=c(1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7),
type=c('N','N','N', 'N', 'P','P','N','N','N', 'I', 'I','N','N','N',
'N', 'N','N','N','N', 'O', 'O','N','N','N', 'O','N','N','N', 'P', 'P', 'N','N','P'),
status=c(NA,'unsup',NA,'unsup',NA,'sup',NA,NA,'sup',NA,'sup','unsup',NA,'unsup',NA,
'unsup','unsup',NA,'unsup',NA,'sup','sup',NA,NA,'unsup',NA,'unsup','unsup','unsup','sup', NA, NA, 'sup'))
預期 output
1.
id type status
1 1 N <NA>
2 1 N unsup
3 1 N <NA>
4 1 N unsup
5 1 P <NA>
6 1 P sup
7 3 N unsup
8 3 N <NA>
9 3 N unsup
10 3 N <NA>
11 3 N unsup
12 4 N unsup
13 4 N <NA>
14 4 N unsup
15 4 O <NA>
16 4 O sup
17 6 N <NA>
18 6 N unsup
19 6 N unsup
20 6 P unsup
21 6 P sup
那么其中,id切換到P的是:
id type status
1 1 N <NA>
2 1 N unsup
3 1 N <NA>
4 1 N unsup
5 1 P <NA>
6 1 P sup
7 6 N <NA>
8 6 N unsup
9 6 N unsup
10 6 P unsup
11 6 P sup
對於第一種情況,在按“id”分組后, filter
任何不具有“sup” status
值的“id”並type
“N”,以及那些具有任何非 NA 值的status
,其中type
為“N”
library(dplyr)
data1 <- data %>%
group_by(id) %>%
filter((!any((status %in% 'sup' & type == 'N'), na.rm = TRUE))&
any(!is.na(status[type == "N"]))) %>%
ungroup
-輸出
data1
# A tibble: 21 × 3
id type status
<dbl> <chr> <chr>
1 1 N <NA>
2 1 N unsup
3 1 N <NA>
4 1 N unsup
5 1 P <NA>
6 1 P sup
7 3 N unsup
8 3 N <NA>
9 3 N unsup
10 3 N <NA>
# … with 11 more rows
從子集數據中,我們可以在檢查type
值為“N”且下一個值( lead
)是每個“id”的“P”的any
情況后再次filter
data1 %>%
group_by(id) %>%
filter(any(type== "N" & lead(type) == "P", na.rm = TRUE)) %>%
ungroup
# A tibble: 11 × 3
id type status
<dbl> <chr> <chr>
1 1 N <NA>
2 1 N unsup
3 1 N <NA>
4 1 N unsup
5 1 P <NA>
6 1 P sup
7 6 N <NA>
8 6 N unsup
9 6 N unsup
10 6 P unsup
11 6 P sup
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.