私はたくさんの文字列を持っていますが、それぞれが次の形式になる傾向があります。Ab_Cd-001234.txt
それを。に置き換えたい001234
。どうすればRでそれを達成できますか?
5 に答える
ストリンガーパッケージには、この種の作業のための便利なショートカットがたくさんあります。
# input data following @agstudy
data <- c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')
# load library
library(stringr)
# prepare regular expression
regexp <- "[[:digit:]]+"
# process string
str_extract(data, regexp)
Which gives the desired result:
[1] "001234" "001234"
正規表現を少し説明するには:
[[:digit:]]
0から9までの任意の数です
+
前の項目(この場合は数字)が1回以上一致することを意味します
このページは、この種の文字列処理にも非常に役立ちます:http: //en.wikibooks.org/wiki/R_Programming/Text_Processing
を使用するgsub
か、sub
これを行うことができます:
gsub('.*-([0-9]+).*','\\1','Ab_Cd-001234.txt')
"001234"
regexpr
で使用できますregmatches
m <- gregexpr('[0-9]+','Ab_Cd-001234.txt')
regmatches('Ab_Cd-001234.txt',m)
"001234"
編集2つのメソッドはベクトル化されており、文字列のベクトルに対して機能します。
x <- c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')
sub('.*-([0-9]+).*','\\1',x)
"001234" "001234"
m <- gregexpr('[0-9]+',x)
> regmatches(x,m)
[[1]]
[1] "001234"
[[2]]
[1] "001234"
genXtract
qdapパッケージから使用できます。これは、左の文字列と右の文字列を取り、その間の要素を抽出します。
library(qdap)
genXtract("Ab_Cd-001234.txt", "-", ".txt")
私はagstudyの答えを大いに好みますが。
agstudyに一致するように回答を拡張する編集:
x <- c('Ab_Cd-001234.txt','Ab_Cd-001234.txt')
genXtract(x, "-", ".txt")
# $`- : .txt1`
# [1] "001234"
#
# $`- : .txt2`
# [1] "001234"
gsub プレフィックスとサフィックスを削除します。
gsub(".*-|\\.txt$", "", x)
ツールパッケージツールから 使用file_path_sans_ext
して拡張子を削除しsub
てから、プレフィックスを削除するために使用します。
library(tools)
sub(".*-", "", file_path_sans_ext(x))
ストラッププライク ドットの後と前の数字を抽出します。詳細については、 gsubfnホームページを参照してください。
library(gsubfn)
strapplyc(x, "-(\\d+)\\.", simplify = TRUE)
数値を返したい場合は、次のようにするのstrapply
ではなく、strapplyc
次のように使用できます。
strapply(x, "-(\\d+)\\.", as.numeric, simplify = TRUE)
この回答を追加するのは、クリーンアップする文字列に含まれる数字以外の文字に関係なく機能し、文字列は「Ab_Cd-001234.txt」の形式に従う傾向があるとOPが言ったためです。バリエーションを考慮に入れることを意味します。
この回答では、文字列からすべての数字を取得してまとめているため、文字列が「4_Ab_Cd_001234.txt」の場合、結果は「4001234」になります。
取得したデータフレームの列にソリューションを向けたい場合は、
df$clean_column<-gsub("[^0-9]", "", df$dirty_column)
これはここでの答えと非常に似ています: https ://stackoverflow.com/a/52729957/9731173 。
基本的に、私のソリューションで行っているのは、数字以外の文字を「」に置き換えることです。一方、リンクした回答は、数字以外の文字、-または。を置き換えます。