如果与R中的条件匹配,则过滤id的所有详细信息



我有一个数据帧:

d = data.frame(
'Id'=c(101,101,102,102,103,103,104,104,105,105),
'Description'=c('Date Change','Not P','Data Change','Not P','Date Change','Absent','Date Updated','Not P','finalupdate','Present'),
'Time'=c(23,23,42,54,56,12,98,32,54,65))

我想过滤掉具有描述"非p"的Id的所有细节,就像Id 101具有描述"p"一样;不是P〃;与Id 102相同,所以我想要这些Id的所有详细信息。

我想过使用循环,但我认为在R 中可能有一些简单的方法

我们可以在进行group_by后使用filter

library(dplyr)
d %>% 
group_by(Id) %>% 
filter(! 'Not P' %in% Description) %>%
ungroup

-输出

# A tibble: 4 x 3
#     Id Description  Time
#  <dbl> <chr>       <dbl>
#1   103 Date Change    56
#2   103 Absent         12
#3   105 finalupdate    54
#4   105 Present        65

若要执行相反操作,请移除否定(!(

d %>%
group_by(Id) %>%
filter('Not P' %in% Description) %>%
ungroup

-输出

# A tibble: 6 x 3
#    Id Description   Time
#  <dbl> <chr>        <dbl>
#1   101 Date Change     23
#2   101 Not P           23
#3   102 Data Change     42
#4   102 Not P           54
#5   104 Date Updated    98
#6   104 Not P           32

或使用base Rsubset

subset(d, !Id %in% Id[Description == 'Not P'])
subset(d, Id %in% Id[Description == 'Not P'])

最新更新