[英]replace NA or else <NA> with something or something else in column of data frame
[英]Regex search for specific pattern, if found, replace with something else
我目前正在尝试弄清如何使用正则表达式来清理R中的文本数据。我想知道在哪里可以找到简单的教程? 我一直在网上找东西,但是当我在regex101上尝试一些东西时,我几乎找不到匹配的东西。 如果我这样做,在R内什么也不会改变。 考虑这个例子
Before <- "ACEMOGLU, D., ROBINSON, J., (2012) WHY NATIONS FAIL, (3)"
After <- "ACEMOGLU, D., ROBINSON, J., 2012, WHY NATIONS FAIL, (3)"
> Aftergsub <- gsub("\\([\\d][\\d][\\d][\\d]\\)", "new", "ACEMOGLU, D., ROBINSON, J., (2012) WHY NATIONS FAIL, (3)")
> print(Aftergsub)
[1] "ACEMOGLU, D., ROBINSON, J., (2012) WHY NATIONS FAIL, (3)"
>
当然,“新”应该是使“之前”看起来像“之后”的表达式。 但是根据我的模式,我什至都无法将“之前”更改为其他任何内容。
换句话说,如果前面有4位数字,如何将“)”更改为“,”? 谢谢!
您的模式不起作用,因为TRE regex风味不支持方括号表达式内的速记字符类。 您应该使用[[:digit:]]
或[0-9]
,但不要使用[\\\\d]
(实际上与\\
或字母d
匹配 )。
您可以使用
Before <- "ACEMOGLU, D., ROBINSON, J., (2012) WHY NATIONS FAIL, (3)"
gsub("\\((\\d{4})\\)", "\\1,", Before)
## => [1] "ACEMOGLU, D., ROBINSON, J., 2012, WHY NATIONS FAIL, (3)"
观看R在线演示
注意 ,我使用的\\\\d
周围没有方括号(=括号表达式)。 TRE regex引擎将"\\\\d{4}"
视为四位数的匹配模式。 它等于[0-9]{4}
或[[:digit:]]{4}
。
细节
\\\\(
-文字(
(\\\\d{4})
-组1:任意四位数字 \\\\)
-文字)
\\\\1
对组1值的反向引用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.