मेरे पास डेटाफ्रेम है:

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))

मैं आईडी के सभी विवरणों को फ़िल्टर करना चाहता हूं जिसमें विवरण 'पी नहीं है, जैसे आईडी 101 में आईडी 102 के साथ विवरण "पी नहीं" है, इसलिए मुझे इन आईडी के सभी विवरण चाहिए।

मैंने लूप के साथ करने के बारे में सोचा लेकिन मुझे लगता है कि इसे R . में करने का कुछ आसान तरीका हो सकता है

r
1
Nishant 22 पद 2020, 20:15

1 उत्तर

सबसे बढ़िया उत्तर

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'])
1
akrun 22 पद 2020, 20:16