使用R从文本中删除日期和所有垃圾
我正在用R清理一个由成千上万个文本组成的巨大数据集。我知道正则表达式可以很方便地完成这项工作,但我在使用它方面很差。我仔细检查了一下,但找不到解决办法。这是我的虚拟数据:使用R从文本中删除日期和所有垃圾,r,regex,text,data-cleaning,gsub,R,Regex,Text,Data Cleaning,Gsub,我正在用R清理一个由成千上万个文本组成的巨大数据集。我知道正则表达式可以很方便地完成这项工作,但我在使用它方面很差。我仔细检查了一下,但找不到解决办法。这是我的虚拟数据: foo_data <- c("03 / 05 / 2016 Education is good: WO0001982", "04/02/2016 Health is a priority: WAI000553", "
foo_data <- c("03 / 05 / 2016 Education is good: WO0001982",
"04/02/2016 Health is a priority: WAI000553",
"09/ 08/2016 Economy is bad: 2031CE8D",
": : 21 / 05 / 13: Vehicle license is needed: DPH2790 ")
感谢您对stringr的任何帮助。使用stringr,请尝试以下操作:
库(stringr)
图书馆(magrittr)
str\u remove\u all(foo\u数据,\\/\\\\d+\\\\:WO”)%>%
str_squish()
#>[1]“教育是好的”“健康是重中之重”
#>[3]“经济不好”“需要车辆牌照”
由(v2.0.0)于2021年4月22日创建
数据
foo_data <- c("03 / 05 / 2016 Education is good: WO0001982", "04/02/2016 Health is a priority: WO0002021",
"09/ 08/2016 Economy is bad: WO001999", "09/08/ 2016 Vehicle license is needed: WO001050")
foo_datafoo_data[1]“教育是好的”“健康是重中之重”
#>[3]“经济不好”“需要车辆牌照”
由(v2.0.0)于2021-04-22年创建,我认为其特殊性如下:
首先,让我们删除日期字符串。我将假定mm/dd/yyyy
或dd/mm/yyyy
,其中前两个数字可以是1-2位,第三个总是4位。如果这是可变的,则可以将正则表达式更改为稍微宽松一点:
foo_data2提供的任何答案都能解决您的问题吗,William?嗨@r2evans,您的答案看起来不错。但是,您可以修改代码以处理符号未硬编码和日期格式不正确的情况。我修改了原问题以反映我的问题。谢谢。gsub(“^[:]*|:”,“,”,gsub(\\d{1,2}\\s*/\\s*\\d{1,2}\\s*/\\s*\\\d{2}(\\d{2})“,”,foo_data))
谢谢@r2evans。在虚拟数据集中它看起来还可以,但是在大型数据集中,并不是所有的缩写都被删除了,尽管类似日期的字符串被删除了。诸如“11D2013A”
,“MLY3595”
,“WAI004882”,“4Fun”
等缩写词未从c(“教育,支持-11D2013A”,“MLY3595-母乳喂养”,“WAI004882”,“雪佛兰--4Fun识字和算术”)
中删除。预期结果应该是“教育、支持”、“母乳喂养”、NA、“识字和算术”
。任何帮助我都会感激的。我只能做我“知道”的事情。也许您可以添加更多的示例,清楚地传达差异并证明正则表达式中的过度选择。
foo_data <- c("03 / 05 / 2016 Education is good: WO0001982", "04/02/2016 Health is a priority: WO0002021",
"09/ 08/2016 Economy is bad: WO001999", "09/08/ 2016 Vehicle license is needed: WO001050")