【发布时间】:2017-11-01 21:14:06
【问题描述】:
我有一个数据集,其中有一列包含带有年份的标签 (OldLabel),我想创建另一列只包含标签,而不是年份 (NewLabel)。我编写了以下代码,但它在新标签的末尾留下了一个空格。
data["NewLabel"] <- gsub("20..", "", data$OldLabel)
#removes any part of the OldLabel column that starts with 20 and ends with 2 digits, e.g: 2011 or 2008
有没有办法让 gsub 用退格替换序列,这样它就可以摆脱它替换的一年中的任何空格?我尝试使用"\\b" 作为我的替换文本,但这只是用b 替换它,而不是退格。
编辑:根据请求,OldLabel 的示例将是 "Valley Summer 2014",它应该成为 "Valley Summer",但最终使用我当前的代码成为 "Valley Summer "。但是,有些也可能是 2012 Valley Summer 的形式,所以我认为仅仅在模式中包含一个空格就足够健壮了。
【问题讨论】:
-
看看
OldLabel的一些例子会有所帮助。如果要替换“20”+“2 位数字”,更好的正则表达式是“20\\d{2}”。 -
或
gsub("20\\d\\d", "", data$OldLabel)非常清楚地显示了模式中表示的两位数字,这不如@neilfws 优雅。 -
我将使用@ShawnMehan 的建议来保持可读性。不过,谢谢你们,这是一个比我拥有的更强大和优雅的模式。
-
另见
trimws,它会删除字符串开头或结尾的空格。如果需要,您可以使用此函数包装gsub的输出,但编写更智能的正则表达式 42- 建议可能是更好的方法。