R gsub 空白后的所有内容

R gsub everything after blank

我正在努力弄清楚如何 gsub 第一个 小时 值的 "blank" 之后的所有内容。

as.data.frame(valeur)

         valeur
1    8:01 8:15 
2  17:46 18:00 
3          <NA>
4          <NA>
5          <NA>
6          <NA>
7    8:01 8:15 
8  17:46 18:00 

我需要的是

     valeur
1          8:01
2         17:46
3          <NA>
4          <NA>
5          <NA>
6          <NA>
7          8:01
8         17:46

有线索吗?

我试过了

 gsub("[:blank:].*$","",valeur)

差不多

valeur = c(" 8:01 8:15 ", " 17:46 18:00 ", NA, NA, NA, NA, " 8:01 8:15 ", 
" 17:46 18:00 ")

我猜你从 'valeur' 输出中得到了 leading/lagging space。我们可以用 gsub 删除那些。我们匹配一个或多个space从字符串的开头(^\s+)或者(|)到字符串的结尾space(\s+$),替换为 ''

valeur1 <- gsub('^\s+|\s+$', '', valeur)

如果我们需要第一个非space字符,我们匹配space(\s+)后跟非space(\S+)直到字符串的末尾并替换为 ''.

sub('\s+\S+$', '', valeur1)
#[1] "8:01"  "17:46" NA      NA      NA      NA      "8:01"  "17:46"

要获取最后的非space字符,请使用sub匹配一个或多个不是space(\S+)开头的字符字符串 ('^') 后跟一个或多个 space (\s+) 并将其替换为 '' 以获得最后一个非 space 字符。

sub('^\S+\s+', '', valeur1)
#[1] "8:15"  "18:00" NA      NA      NA      NA      "8:15"  "18:00"

以上可以一步完成,我们在开头匹配零个或多个 space (^\s*) 或 (|) 一个或多个 space (\s+) 后跟一个或多个非 space 字符 (\S+),最后跟零个或多个 space 字符 (\s*$ ) 并替换为 ''.

 gsub("^\s*|\s+\S+\s*$","",valeur)
 #[1] "8:01"  "17:46" NA      NA      NA      NA      "8:01"  "17:46"

或者另一种选择是 stri_extract_firststri_extract_last 来自 library(stringi) 我们在开头或结尾匹配一个或多个非 space 字符。

 library(stringi)
 stri_extract_first(valeur, regex='\S+')
 #[1] "8:01"  "17:46" NA      NA      NA      NA      "8:01"  "17:46"

对于lastnon_space个字符

 stri_extract_last(valeur, regex='\S+')
 #[1] "8:15"  "18:00" NA      NA      NA      NA      "8:15"  "18:00"

为了投稿,刚想到:

substr(x = valeur, start = 2, stop = 6)
[1] "8:01 " "17:46" NA      NA      NA      NA      "8:01 " "17:46"