Удаление строк, приводящих к значению в R - PullRequest
1 голос
/ 16 апреля 2020

У меня есть большой набор данных временных рядов, состоящий из информации на уровне человека, начиная с 2014 года и заканчивая 2019 годом. Важные столбцы, связанные с моим вопросом, включают: ID, дату дозирования и row_nbr. Ниже приведен пример:

df<-data.frame(ID=rep(1999,66),Dosage=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15,15,0,0,20,20,20,20,20,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,0,0,20,20,20,20,20,20,20,20,0,0,35,35,35,35,35,35,35,35,35),Date=seq(as.Date('2014-01-01'),length.out=66,by='month'),row_nbr=seq(66))

Я хотел бы удалить все строки, ведущие к первой строке, где дозировка больше 0.

Пример того, что я хотел бы например, данные, которые должны выглядеть при фильтрации данных:

df2<-data.frame(ID=rep(1999,46),Dosage=c(15,15,15,0,0,20,20,20,20,20,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,0,0,20,20,20,20,20,20,20,20,0,0,35,35,35,35,35,35,35,35,35),Date=seq(as.Date('2015-09-01'),length.out=46,by='month'),row_nbr=seq(46))

Я не уверен, как решить эту проблему, я мог бы потенциально сделать это: df<-df%>%filter(! row_nbr==1 & Dosage==0), а затем вызвать c строку нумерация и повторный запуск кода снова и снова, но я хотел посмотреть, есть ли у кого-нибудь представление о том, как лучше решить эту проблему. Спасибо!

Ответы [ 2 ]

3 голосов
/ 16 апреля 2020

Хотя grep, вероятно, будет работать, вам может потребоваться прямое решение, не требующее преобразования строк:

i=first(which(df$Dosage>0))
tail(df, -i+1)
1 голос
/ 16 апреля 2020

Я не очень хорошо разбираюсь в регулярных выражениях ... поэтому, пожалуйста, не стесняйтесь меня поправлять:)

non_0_row <- grep("[^0]",df$Dosage)

non_0_row
#>  [1] 21 22 23 26 27 28 29 30 35 36 37 38 39 40 41 42 43 44 45 48 49 50 51 52 53
#> [26] 54 55 58 59 60 61 62 63 64 65 66

df[-(1:non_0_row[1]),]
#>      ID Dosage       Date row_nbr
#> 22 1999     15 2015-10-01      22
#> 23 1999     15 2015-11-01      23
#> 24 1999      0 2015-12-01      24
#> 25 1999      0 2016-01-01      25
#> 26 1999     20 2016-02-01      26
#> 27 1999     20 2016-03-01      27
#> 28 1999     20 2016-04-01      28
#> 29 1999     20 2016-05-01      29
#> 30 1999     20 2016-06-01      30
#> 31 1999      0 2016-07-01      31
#> 32 1999      0 2016-08-01      32
#> 33 1999      0 2016-09-01      33
#> 34 1999      0 2016-10-01      34
#> 35 1999     10 2016-11-01      35
#> 36 1999     10 2016-12-01      36
#> 37 1999     10 2017-01-01      37
#> 38 1999     10 2017-02-01      38
#> 39 1999     10 2017-03-01      39
#> 40 1999     10 2017-04-01      40
#> 41 1999     10 2017-05-01      41
#> 42 1999     10 2017-06-01      42
#> 43 1999     10 2017-07-01      43
#> 44 1999     10 2017-08-01      44
#> 45 1999     10 2017-09-01      45
#> 46 1999      0 2017-10-01      46
#> 47 1999      0 2017-11-01      47
#> 48 1999     20 2017-12-01      48
#> 49 1999     20 2018-01-01      49
#> 50 1999     20 2018-02-01      50
#> 51 1999     20 2018-03-01      51
#> 52 1999     20 2018-04-01      52
#> 53 1999     20 2018-05-01      53
#> 54 1999     20 2018-06-01      54
#> 55 1999     20 2018-07-01      55
#> 56 1999      0 2018-08-01      56
#> 57 1999      0 2018-09-01      57
#> 58 1999     35 2018-10-01      58
#> 59 1999     35 2018-11-01      59
#> 60 1999     35 2018-12-01      60
#> 61 1999     35 2019-01-01      61
#> 62 1999     35 2019-02-01      62
#> 63 1999     35 2019-03-01      63
#> 64 1999     35 2019-04-01      64
#> 65 1999     35 2019-05-01      65
#> 66 1999     35 2019-06-01      66

Создано в 2020-04-17 пакетом prex (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...