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)
我猜你的“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_last从library(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)