2017-10-02 9 views
0

パターンマッチングに応じて列名の名前を変更します。はの私は、次のデータフレームを持っていると仮定しましょうR

xx2xx30x4xx <- rep(5,30) 
yyyy3yy50y5yyy <- rep(4,30) 
zz12zzzz70z8zz <- rep(7,30) 
df <- data.frame(xx2xx30x4xx,yyyy3yy50y5yyy,zz12zzzz70z8zz) 

私は、彼らが、間に唯一最大の数で構成されますように、列名の名前を変更したいと思います。私は、例えば、GSUB/grepを、ループでそれをやって考える: これは

grep(pattern = "[50-100]", x = colnames(df), value= T) 

今私に列名を返し、私は列の名前は、彼らが一致したことにより、パターン、に等しくなるようにしたいと思いますこれは50〜100の数字であり、それより小さい数字ではありません。これは可能ですか?そうでない場合は、記述されているように列の名前を変更する一般的な方法を知っていますか?前もって感謝します。

+0

'サブ( "\\ D +(\\ D +)\\ D +"、「\\ 1 "、" xxxxxx30xxxx ")が1つの方法です。 Rで使える正規表現の構文については '?regex'を見てください。 – lmo

+0

名前(df)< - gsub(" \\ D "、" "、names(df))'を探していますか? –

答えて

1
xxxxxx30xxxx <- rep(5,30) 
yyyyyyy50yyyyy <- rep(4,30) 
zzzzzzz70zzzz <- rep(7,30) 
df <- data.frame(zzzzzzz70zzzz,yyyyyyy50yyyyy,xxxxxx30xxxx) 

grep(pattern = "[0-100]", x = colnames(df), value= T) 

new_colnames <- gsub("\\D", "", colnames(df)) 
colnames(df) <- new_colnames 

私はあなたを正しく理解してくれることを望みます。 gsubコマンドは、列名から桁でないものをすべて消去します。したがって、その間に数字が残っています。

EDIT:

このコードは、30と70の間、あなたの文字列に2桁の番号と一致し、それを抽出します。ここで

xxxxxx30xxxx <- rep(5,30) 
yyyyyyy50yyyyy <- rep(4,30) 
zzzzzzz70zzzz <- rep(7,30) 
df <- data.frame(zzzzzzz70zzzz,yyyyyyy50yyyyy,xxxxxx30xxxx) 

grep(pattern = "[0-100]", x = colnames(df), value= T) 

# new_colnames <- gsub("\\D", "", colnames(df)) 

new_colnames <- regmatches(colnames(df), regexpr("([3-6][0-9])|([7][0])",colnames(df))) 

colnames(df) <- new_colnames 

は正規表現と文字列操作のいくつかの情報です:

https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html

https://www.regular-expressions.info/rlanguage.html

+0

はい、これは(ほとんど)正常に動作します!列名が複数の数字で構成されているとしたら、たとえばzz2z3z70zzz5zなどです。特定の範囲に属する数字のみを必要とする場合は、50から100とします。この場合、2,3および5も削除されます。ありがとう! – Yaahtzeck

+0

私の編集した答えをチェックしてください:) – brettljausn

関連する問題