我有一个数据帧:
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 R
和subset
subset(d, !Id %in% Id[Description == 'Not P'])
subset(d, Id %in% Id[Description == 'Not P'])