R gsub将替换除

R gsub将替换除,r,replace,R,Replace,我有一个数据框,有这样一列 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

我有一个数据框,有这样一列

 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
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
如何使用gsub替换除
铃声
2016年2月14日

最后一列应该是这样的

 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
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
-----根据G.Grothendieck、Frank和Dason的评论更新的问题

关于:

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)

df您可以使用
dplyr
如下。不过,可能有一种更好的方法来处理正则表达式(即w/o需要粘贴
)。这假设数据已经在
df

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

... 如何确定这些是您想要的结果?我想您至少需要两个示例字符串来说明问题的性质。如果你只有这一个字符串,并且确切地知道需要从中提取什么,你就可以这样做。@Frank,我有一个列,列中有很多行都是垃圾,我只想保留两样东西,一个是单词(ringing),第二个是数字或日期,比如带点或斜杠(
/
)或者dash@Dason,和我上面说的一样,如果你只想知道哪些行有振铃,哪些行有指定形式的日期,那么
transform(DF,has_ringing=grepl(“ringing”,colX),has_date=grepl(“../../....”,colX))
假设
DF
是数据帧,
colX
是相关列regmatches
、gsubfn中的
strapplyc
、以及stringr中的某些函数都可以提取匹配的字符串。