我正在努力弄清楚如何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
我需要的是
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 ")
答案 0 :(得分:4)
我猜你已经领先于&#39; valeur&#39;输出。我们可以删除那些gsub
的人。我们匹配字符串(^\\s+
)末尾的字符串(|
)或(\\s+$
)空格开头的一个或多个空格,替换为''
。
valeur1 <- gsub('^\\s+|\\s+$', '', valeur)
如果我们需要第一个非空格字符,我们会将空格(\\s+
)后跟非空格(\\S+
)匹配到字符串的末尾,并替换为''
sub('\\s+\\S+$', '', valeur1)
#[1] "8:01" "17:46" NA NA NA NA "8:01" "17:46"
要获取最后一个非空格字符,请使用sub
匹配字符串开头不是空格(\\S+
)的一个或多个字符(&#39; ^&# 39;)后跟一个或多个空格(\\s+
)并将其替换为''
以获取最后一个非空格字符。
sub('^\\S+\\s+', '', valeur1)
#[1] "8:15" "18:00" NA NA NA NA "8:15" "18:00"
以上操作可以在一个步骤中完成,我们在开头(^\\s*
)或(|
)匹配一个或多个空格(\\s+
)后跟随零个或多个空格通过一个或多个非空格字符(\\S+
),后跟零或多个空格字符(\\s*$
),并替换为''
。
gsub("^\\s*|\\s+\\S+\\s*$","",valeur)
#[1] "8:01" "17:46" NA NA NA NA "8:01" "17:46"
或其他选项stri_extract_first
或stri_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"
对于last
非空格字符
stri_extract_last(valeur, regex='\\S+')
#[1] "8:15" "18:00" NA NA NA NA "8:15" "18:00"
答案 1 :(得分:2)
为了贡献,只想到:
substr(x = valeur, start = 2, stop = 6)
[1] "8:01 " "17:46" NA NA NA NA "8:01 " "17:46"