从R中的列中删除字符串

问题描述 投票:0回答:3

执行R代码后,我在数据框的列中得到的值是:

  1. 2012年7月25日下注
  2. 2015年6月22日下注
  3. 2015年4月9日将是
  4. [2016年11月14日

    我只想要日期,如何从值中删除“ bet”,“ be”?

我正在使用以下代码从文本文档中提取以上值:

coalesce((substr((stringr :: str_match(text,“ ISDA主协议的日期自(。)”)[,2]),1,16)),(substr((stringr :: str_match(文本,“ ISDA主协议,日期为(。)“)[,2]),1,13)))

[如果我刷合并的争论,那么第四个值将被截断。

我对代码没问题,但是在清洁时,应如何删除“ bet”,“ be”?

r data-cleaning coalesce
3个回答
1
投票

如果使用lubridate,则可以在日期之后删除多余的文本:

library(lubridate)

test_strings <- c("25 July 2012 bet", "09 April 2015 be")

dmy(test_strings)

[1] "2012-07-25" "2015-04-09"

0
投票

我们可以使用sub删除空格,并使用"be"删除所有内容

sub("\\s+be.*", "", c("25 July 2012 bet", "09 April 2015 be"))
#[1] "25 July 2012"  "09 April 2015"

0
投票

我远不是一名正则表达式专家,但这里是做您想要的事情的方式:

library(tidyverse, verbose = F)

df <- tibble::tribble(
  ~V1,                ~V2,
   1L, "25 July 2012 bet",
   2L, "22 June 2015 bet",
   3L, "09 April 2015 be",
   4L, "14 November 2016"
  )

df %>% 
  mutate(V2 = str_replace(V2, pattern = "[:space:]be.*", replacement = ""))
#> # A tibble: 4 x 2
#>      V1 V2              
#>   <int> <chr>           
#> 1     1 25 July 2012    
#> 2     2 22 June 2015    
#> 3     3 09 April 2015   
#> 4     4 14 November 2016

reprex package(v0.3.0)在2020-02-21创建

© www.soinside.com 2019 - 2024. All rights reserved.