R - 如何从字符串中删除日期?

时间:2018-03-14 19:55:22

标签: r

我正在清理包含各种奇怪命名约定的表。我一直看到的一个名字是一串日期。其中一些名称包含的数字可以,但我想从字符串中删除日期格式。

编辑 - 日期为mm / YY或mm / YYYY格式。正如我所见,这些日期通常是从2017年开始(我们想要更新的更新)。

例如:

names <- c('IT Company 09/18',  'Tech Company 9/17', '9/2018 XYZ Company', '50/50 Phone Company')

应该是:

c('IT Company', 'Tech Company', 'XYZ Company', '50/50 Phone Company') 

我试图在这里使用此函数来标记字符串&#34; /&#34;和日期,但它也提取不是日期的数字:

names2 <- names[grepl("[[:digit:]]", names) & grepl("/", names)]

输出

> names2
[1] "IT Company 09/18"   
[2] "Tech Company 9/17"  
[3] "9/2018 XYZ Company" 
[4] "50/50 Phone Company"

是否有一个特定的日期表达式代替[[:digit:]]来查找带日期的字符串?

另外,删除日期的功能是什么,包括字符串中的斜杠?

3 个答案:

答案 0 :(得分:3)

听起来像是stringr套餐的工作&#39; string_remove_all功能。

诀窍是让正则表达式模式正确。事实上,您没有标准的日期格式,并且您希望保留50/50,这会使您的生活变得艰难。

这对我有用:

library('stringr')

date.pattern <- ' ?(0|1)?[1-9]/([0-9]{4}|[0-9]{2}) ?'

names <- c('IT Company 09/18',  'Tech Company 9/17', '9/2018 XYZ Company', '50/50 Phone Company')
str_remove_all(names, date.pattern)

该正则表达式应该说

  • &#34;日期是一个数字,或两个数字,其中第一个数字是0或1.(假设第一个数字总是一个月,单个数字月份可能有一个前导零)。

  • 然后它(懒惰地)允许长度为2或4的年份。如果你有一个你期望遇到的年份的感觉,这可以更精确。 &#34; 0001&#34;您的数据集可能不是一年。

  • 最后,它还会删除前导空格或尾随空格(如果它们存在),因为看起来日期可以在您关注的部分之前和之后,并且从您关注的部分进行空格分隔。

输出

[1] "IT Company"          "Tech Company"        "XYZ Company"        
[4] "50/50 Phone Company"

通过str_extract_all运行此操作可能很明智,并检查输出以查看它们是否都具有日期外观。

答案 1 :(得分:1)

我相信以下内容会做你想要的。它使用正则表达式后跟trimws来修剪结果开头和结尾的空格。

trimws(gsub("[[:digit:]]{1,4}/[[:digit:]]{1,4}", "", names))
#[1] "IT Company"    "Tech Company"  "XYZ Company"   "Phone Company"

答案 2 :(得分:1)

这是一个stringr解决方案。这很复杂,因为很难通过查看来确定某个日期是否是日期:如果有更多情况,您需要检查输出并调整此代码。第一个正则表达式捕获的格式是1/2位数,/01,还有一个数字,假设任何日期都是2000年后。第二行删除数字,/,然后是四位数。这很好地排除了50/50,但如果它被称为12/50 Phone Company怎么办?这可以解释为1950年12月的特定日期格式。您必须确保不会意外地排除任何类似的特殊情况,并且没有通用的方法来判断某些事情是否属于约会。

我会阅读正则表达式;这是一个good resource开始。

library(stringr)
names <- c('IT Company 09/18',  'Tech Company 9/17', '9/2018 XYZ Company', '50/50 Phone Company')

names %>%
  str_replace("\\d{1,2}/(0|1)\\d", "") %>%
  str_replace("\\d/\\d{4}", "") %>%
  str_trim()
#> [1] "IT Company"          "Tech Company"        "XYZ Company"        
#> [4] "50/50 Phone Company"

reprex package(v0.2.0)创建于2018-03-14。