Home > Enterprise >  Remove all lines of Dataset of specific ID starting from a certain string in the dataset
Remove all lines of Dataset of specific ID starting from a certain string in the dataset

Time:08-07

I have a dataset with two variables ("Aufzeichnungen" , "ID"). I want to remove all lines of the Dataset that contains the word "next" and also remove the following lines until the next ID-Number starts.

I have different cases and every ID is a customertreatment, but the word "next" and all the following lines of the same ID have to be removed.

That's my input:

Aufzeichnungen ID
1                                                   07.03.22   A: stechender Schmerz,    scharfkantig  1
2                                                                                                D/B:  1
3                                                                                                  T:  1
4                                                             pat aht an 36 üz distal, seit paartagen  1
5                                                  36 vipr  , perk-, keine c zu entdekcne,üz bilfuird  1
6          pat aufgekläörtggf  RÖ um c auszuschileßen, pat verweigert RÖ aus Angst vor Strahlung, pat  1
7                      aufgeklärt angst nicht nötig und c unter fllg oder apprx nicht auszuschließen,  1
8                                                   pat knirscht, schiene empohlen, pat meldet sich..  1
9                                                                                next: noch schmerezn  1
10                                                                                             an 36?  1
11                                                             20.11.21                  A: kontrolle  2
12                                                                                               D/B:  2
13                                                                                                 T:  2
14 ->Pat. geht es besser hat keine blutung mehr, bltung stabil, pat aufgeklärt muss noch 1 tag stabil  2
15          bleiben dann sollten keine Nahcbltung mehr kommen! wenn doch dann montag gleich wieder zu  2
16                                                                     rkontrolle und in towche Nahtx  2
17                                                              ->gute wundheilung, tupfer mitgegeben  2
18                                                                                                 ->  2
19                                                                                               <NA>  2
20                                                                            next 0 1 Kontrolle Naht  2
21                                                                                          ex bei F2  2
22                                                                                              K3/BV  2

that's my input.

My output should look like:

    Aufzeichnungen ID
1                                                   07.03.22   A: stechender Schmerz,    scharfkantig  1
2                                                                                                D/B:  1
3                                                                                                  T:  1
4                                                             pat aht an 36 üz distal, seit paartagen  1
5                                                  36 vipr  , perk-, keine c zu entdekcne,üz bilfuird  1
6          pat aufgekläörtggf  RÖ um c auszuschileßen, pat verweigert RÖ aus Angst vor Strahlung, pat  1
7                      aufgeklärt angst nicht nötig und c unter fllg oder apprx nicht auszuschließen,  1
8                                                   pat knirscht, schiene empohlen, pat meldet sich..  1
9                                                                               
11                                                             20.11.21                  A: kontrolle  2
12                                                                                               D/B:  2
13                                                                                                 T:  2
14 ->Pat. geht es besser hat keine blutung mehr, bltung stabil, pat aufgeklärt muss noch 1 tag stabil  2
15          bleiben dann sollten keine Nahcbltung mehr kommen! wenn doch dann montag gleich wieder zu  2
16                                                                     rkontrolle und in towche Nahtx  2
17                                                              ->gute wundheilung, tupfer mitgegeben  2
18                                                                                                 ->  2
19                                                                                               <NA>  2
20    

So that lines 9,10 and 20,21,22 are removed.

I tried with new_df= PKV[!grepl("ext",PKV$Aufzeichnungen),]
but this removes just one line and is not specific for the ID

CodePudding user response:

We can use slice function from dplyr and grepl the first index having the word next or Next and slice the above lines

library(dplyr)

PKV |> group_by(ID) |>
   slice(1:(which(grepl("[Nn]ext" , Aufzeichnungen))[1]-1))
  • output
# A tibble: 17 × 2
# Groups:   ID [2]
   Aufzeichnungen                                                            ID
   <chr>                                                                  <int>
 1 "07.03.22   A: stechender Schmerz,    scharfkantig"                        1
 2 "D/B:"                                                                     1
 3 "T:"                                                                       1
 4 "pat aht an 36 üz distal, seit paartagen"                                  1
 5 "36 vipr  , perk-, keine c zu entdekcne,üz bilfuird"                       1
 6 "pat aufgekläörtggf  RÖ um c auszuschileßen, pat verweigert RÖ aus An…     1
 7 "aufgeklärt angst nicht nötig und c unter fllg oder apprx nicht auszu…     1
 8 "pat knirscht, schiene empohlen, pat meldet sich.."                        1
 9 "20.11.21                  A: kontrolle"                                   2
10 " D/B:"                                                                    2
11 "T:"                                                                       2
12 "->Pat. geht es besser hat keine blutung mehr, bltung stabil, pat auf…     2
13 "bleiben dann sollten keine Nahcbltung mehr kommen! wenn doch dann mo…     2
14 "rkontrolle und in towche Nahtx"                                           2
15 "->gute wundheilung, tupfer mitgegeben"                                    2
16 "->"                                                                       2
17 "<NA>"                                                                     2

For efficiency we can use data.table library

library(data.table)

setDT(PKV)
PKV[ , .SD[1:(which(grepl("[Nn]ext" , Aufzeichnungen))[1]-1)] , by = "ID"][]

CodePudding user response:

Update: After managing to load the original df like Mohamed Desouky 1 did. Here is a more concise solution:

We group by ID and id (where id is the group when "next" or "Next" appears until the next "next" or "Next" appears.

Then filter if both are not equal:

library(dplyr)
test %>% 
  group_by(id = cumsum(grepl('next|Next', Aufzeichnungen))) %>%
  filter(ID!=id) %>% 
  ungroup() %>% 
  select(-id)
   Aufzeichnungen                                                                         ID
   <chr>                                                                               <dbl>
 1 1                                                   07.03.22   A: stechender Schme…     1
 2 2                                                                                 …     1
 3 3                                                                                 …     1
 4 4                                                             pat aht an 36 ??z di…     1
 5 5                                                  36 vipr  , perk-, keine c zu en…     1
 6 6          pat aufgekl????rtggf  R?? um c auszuschile??en, pat verweigert R?? aus …     1
 7 7                      aufgekl??rt angst nicht n??tig und c unter fllg oder apprx …     1
 8 8                                                   pat knirscht, schiene empohlen…     1
 9 11                                                             20.11.21           …     2
10 12                                                                                …     2
11 13                                                                                …     2
12 14 ->Pat. geht es besser hat keine blutung mehr, bltung stabil, pat aufgekl??rt mu…     2
13 15          bleiben dann sollten keine Nahcbltung mehr kommen! wenn doch dann mont…     2
14 16                                                                     rkontrolle …     2
15 17                                                              ->gute wundheilung…     2
16 18                                                                                …     2
17 19                                                                                …     2

First answer: Somehow the last line is not in my dataframe. Anyway here is possible way how we could do it.

The problem is to identify the unique ID column. So for this example this will work. But if id > 9 e.g. we have to adapt the code:

library(tidyverse)

test %>% 
  mutate(across(, ~str_squish(.))) %>% 
  mutate(x = parse_number(str_sub(Aufzeichnungen,-1,-1))) %>% 
  fill(x, .direction = "downup") %>% 
  mutate(helper = cumsum(str_detect(Aufzeichnungen, 'next'))) %>%
  group_by(helper, x) %>% 
  filter(x!=helper) %>% 
  ungroup() %>% 
  select(-x, -helper)
   Aufzeichnungen                                                                                 ID                                  
   <chr>                                                                                          <chr>                               
 1 1 07.03.22 A: stechender Schmerz                                                               scharfkantig 1                      
 2 2 D/B: 1                                                                                       NA                                  
 3 3 T: 1                                                                                         NA                                  
 4 4 pat aht an 36 ??z distal                                                                     seit paartagen 1                    
 5 5 36 vipr                                                                                      perk-, keine c zu entdekcne,??z bil…
 6 6 pat aufgekl????rtggf R?? um c auszuschile??en                                                pat verweigert R?? aus Angst vor St…
 7 7 aufgekl??rt angst nicht n??tig und c unter fllg oder apprx nicht auszuschlie??en             1                                   
 8 8 pat knirscht                                                                                 schiene empohlen, pat meldet sich..…
 9 11 20.11.21 A: kontrolle 2                                                                     NA                                  
10 12 D/B: 2                                                                                      NA                                  
11 13 T: 2                                                                                        NA                                  
12 14 ->Pat. geht es besser hat keine blutung mehr                                                bltung stabil, pat aufgekl??rt muss…
13 15 bleiben dann sollten keine Nahcbltung mehr kommen! wenn doch dann montag gleich wieder zu 2 NA                                  
14 16 rkontrolle und in towche Nahtx 2                                                            NA                                  
15 17 ->gute wundheilung                                                                          tupfer mitgegeben 2                 
16 18 -> 2                                                                                        NA                                  
17 19 <NA> 2                                                                                      NA        
  • Related