Отфильтруйте записи с шаблоном в R-кадре данных, используя dplyr с регулярным выражением - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь извлечь только записи с датой в столбце col1 и отфильтровать другие записи.Проблема в том, что моя переменная не имеет фиксированного формата данных.Поэтому я использую регулярное выражение в пакете dplyr в R с сопоставлением с шаблоном.Возможность фильтрации текстовых данных из набора данных.Однако не в состоянии отфильтровать записи, которые просто есть "2018".Любая помощь будет очень признательна.

library(dplyr)
library(re)
library(stringr)
data1 <- data.frame( c( "sds_ds", "2018/01/11", "02/04/2018","2018"), c( 2018, 76, 35,45), c( 2017, 79, 38,46 ))
names(data1) <- c("col1", "col2", "col3")
data1

data1_clean = data1 %>% 
  filter(!str_detect(col1, pattern = "[a-z]"))
data1_clean

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Если мы filter выводим строки, в столбце которых есть только год, можно отменить

library(stringi)
library(dplyr)
data1 %>% 
   filter(str_detect(col1, '[0-9/]'), !stri_detect(col1, regex = "^[0-9]{4}$"))
#         col1 col2 col3
#1 2018/01/11   76   79
#2 02/04/2018   35   38
0 голосов
/ 23 декабря 2018

Мы можем определить регулярное выражение на основе имеющегося у нас формата даты и использовать его в filter

library(dplyr)

data1 %>% filter(grepl("[0-9]{2,4}\\/[0-9]{2}\\/[0-9]{2,4}", col1))


#        col1 col2 col3
#1 2018/01/11   76   79
#2 02/04/2018   35   38

эквиваленте в базе R

data1[grepl("[0-9]{2,4}\\/[0-9]{2}\\/[0-9]{2,4}", data1$col1), ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...