2016-02-17 3 views
-4

У меня есть dataframe с колонки, как этотGSUB заменить все, но

Id Comment 
1  \u009cYes yes for ever for ever the boys cried in their ringing voices with softened faces on 02/14/2016 
2  \u009cYes yes for ever for ever the cried in their ringing voices with softened faces on 01/14/2010 
3  \u009cYes yes for ever for ever t 12/04/2003 
4  \u009c for ever for ever ringing voices 07/02/2002 
5  \u009c for ever for ever ringing softened faces 07/09/2001 

Как я могу использовать GSUB, чтобы заменить все символы, кроме ringing и 02/14/2016

В последней колонке должно быть, как это

Id Comment 
1  ringing 02/14/2016 
2  ringing 01/14/2010 
3    12/04/2003 
4  ringing 07/02/2002 
5  ringing 07/09/2001 

----- Обновленный вопрос с учетом замечаний Г. Гротендиком, Франка и Dason

+1

... как вы определяете, что это те результаты, которые вы хотите? – Dason

+1

Я думаю, вам нужно по крайней мере две строки примера, чтобы проиллюстрировать характер проблемы. Вы могли бы просто сделать «y =» ringing 02/14/2016 », если у вас есть только одна строка и точно знать, что вам нужно извлечь из нее. – Frank

+0

@Frank, у меня есть столбец с множеством строк, полный мусора, я просто хочу сохранить две вещи: одно слово (звонит), а второе - это что-то вроде числа или даты вроде ... с точкой или косой чертой ('/') или тире –

ответ

1

насчет:

df <- read.table(text="Id,Comment 
1,\u009cYes yes for ever for ever the boys cried in their ringing voices with softened faces on 02/14/2016 
2,\u009cYes yes for ever for ever the cried in their ringing voices with softened faces on 01/14/2010 
3,\u009cYes yes for ever for ever t 12/04/2003 
4,\u009c for ever for ever ringing voices 07/02/2002 
5,\u009c for ever for ever ringing softened faces 07/09/2001", header=T, sep=",") 

df$ringing <- '' 
df[grep("ringing", df$Comment), 'ringing'] <- 'ringing' 
df[grep("../../..", df$Comment), 'date'] <- regmatches(df$Comment,regexpr("../../..", df$Comment)) 
df$res <- paste(df$ringing, df$date) 
1

Вы можете использовать dplyr следующим образом. Вероятно, существует лучший способ обрабатывать регулярное выражение (т. Е. Без необходимости paste). Предполагается, что данные уже находятся в df.

library(dplyr) 
df %>% 
    mutate(Comment = paste0(ifelse(grepl('ringing', Comment), 'ringing ', ''), 
          gsub('^.*(\\d{2}/\\d{2}/\\d{4}).*', '\\1', Comment)))