web-dev-qa-db-ja.com

「。」の後の文字列の一部を削除します

変数aのようなNCBI参照シーケンスのアクセッション番号を使用しています。

a <- c("NM_020506.1","NM_020519.1","NM_001030297.2","NM_010281.2","NM_011419.3", "NM_053155.2")  

Biomartパッケージから情報を取得するには、.1.2など。アクセッション番号の後。私は通常、このコードでこれを行います:

b <- sub("..*", "", a)

# [1] "" "" "" "" "" ""

しかし、ご覧のとおり、これはこの変数の正しい方法ではありません。誰でもこれで私を助けることができますか?

60
Lisann

期間をエスケープする必要があります。

a <- c("NM_020506.1","NM_020519.1","NM_001030297.2","NM_010281.2","NM_011419.3", "NM_053155.2")

gsub("\\..*","",a)
[1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155" 
79
Hansi

それらをファイル名のふりをして、拡張子を削除できます:

tools::file_path_sans_ext(a)
# [1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155"
10
zx8754

できること:

sub("*\\.[0-9]", "", a)

または

library(stringr)
str_sub(a, start=1, end=-3)
6
johannes

文字列を固定長にする必要がある場合は、base Rからのsubstrを使用できます。ただし、regexprを使用して.の位置を取得し、substrで使用できます。

substr(a, 1, regexpr("\\.", a)-1)
#[1] "NM_020506"    "NM_020519"    "NM_001030297" "NM_010281"    "NM_011419"    "NM_053155"   
2
akrun