2017-10-10 6 views
2

名前の先頭にいくつかの名前があり、末尾に.という文字のベクトルがありますが、そうでないものもあります。次に例を示します。Rの先頭または末尾の `.`文字を条件付きで削除します

test <- c('.name.1.','name.2','.name.3.') 

私は、条件付きでこれらの名前で.文字を先頭と末尾削除したい

c('name.1','name.2','name.3') 

答えて

7

使用正規表現:

test <- c('.name.1.','name.2','.name.3.') 
gsub('^\\.|\\.$', '', test) 
# [1] "name.1" "name.2" "name.3" 

2つのバックスラッシュ、\\、正規表現では、実際に任意の文字を意味しますドット、.を逃れます。キャレットは、^、文字列の先頭、ドル、$、文字列の最後をマークします。 |は、論理 "or"です。したがって、本質的に、正規表現は、文字列の先頭のドットまたは文字列の最後のドットと一致し、空の文字列で置き換えられます。

正規表現の詳細については、hereと、gsubおよび関連する関数hereに関する情報を参照してください。

ます。また stringrから str_extractを使用することができます
2

substr機能を使用してクイック機能を返すために:

fun1 <- function(x) substr(x, 1 + (1 * as.numeric(substr(x,1,1)=='.')), nchar(x) - (1 * as.numeric(substr(x, nchar(x), nchar(x)) == '.'))) 

substrを使用して、文字列の最初と最後の要素にある.を確認してから、を使用します0を再度入力して、テキストの特定部分を抽出します。たとえば、最初の文字に.があり、2番目の文字にはない場合、substr(text, 2, nchar(text))が抽出されます。

fun1(test) 
[1] "name.1" "name.2" "name.3" 
2

library(stringr) 

str_extract(test, "\\w+\\.\\d") 

またはstr_replace_allgsubからstringr換算):

str_replace_all(test, "[.](.+)[.]", "\\1") 

# [1] "name.1" "name.2" "name.3" 
2

楽しみのためだけに、ここでsubstringgreplと方法があります。

substring(test, 1L + grepl("^\\.", test), nchar(test) - grepl("\\.$", test)) 
[1] "name.1" "name.2" "name.3" 

これはsubstrsubstringを置き換える動作します。これらの関数の優れた点は、2番目と3番目の引数にベクトルをとることです。ここでは、greplを使用して、2番目の引数の1Lと2Lの間、最後の文字と最後から2番目の文字の位置の間で増分できます。

関連する問題