在空白之后,R gsub一切

gia*_*iac 5 regex r gsub

gsub在第一小时值的"空白"之后,我正在努力弄清楚如何处理所有事情.

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 
Run Code Online (Sandbox Code Playgroud)

我需要的是

     valeur
1          8:01
2         17:46
3          <NA>
4          <NA>
5          <NA>
6          <NA>
7          8:01
8         17:46
Run Code Online (Sandbox Code Playgroud)

任何线索?

我试过了

 gsub("[:blank:].*$","",valeur)
Run Code Online (Sandbox Code Playgroud)

几乎

valeur = c(" 8:01 8:15 ", " 17:46 18:00 ", NA, NA, NA, NA, " 8:01 8:15 ", 
" 17:46 18:00 ")
Run Code Online (Sandbox Code Playgroud)

akr*_*run 4

我猜你的“valeur”输出中有前导/滞后空格。我们可以删除那些带有gsub. 我们匹配字符串开头的一个或多个空格 ( ^\\s+) 或|字符串末尾的 ( ) 空格 ( \\s+$),替换为''

valeur1 <- gsub('^\\s+|\\s+$', '', valeur)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

上述操作可以在一步中完成,其中我们在开头匹配零个或多个空格 ( ^\\s*) 或 ( |) 一个或多个空格 ( \\s+) 后跟一个或多个非空格字符 ( \\S+),后跟零个或多个空格字符末尾 ( \\s*$) 并替换为''.

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

或者另一个选项是stri_extract_firstorstri_extract_lastlibrary(stringi)我们在开头或结尾匹配一个或多个非空格字符的地方。

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

对于last非空格字符

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