2016-03-27 25 views
3

私のデータフレームのcolnamesを元のcolnameの一意の文字列に置き換えることができますか?colnameをcolnameの部分文字列に置き換えます。

> colnames(df.iso) 
[1] "../trimmed/100G.tally.fasta" "../trimmed/100R.tally.fasta" "../trimmed/106G.tally.fasta" 
[4] "../trimmed/106R.tally.fasta" "../trimmed/122G.tally.fasta" "../trimmed/122R.tally.fasta" 
[7] "../trimmed/124G.tally.fasta" "../trimmed/124R.tally.fasta" "../trimmed/126G.tally.fasta" 
[10] "../trimmed/126R.tally.fasta" "../trimmed/134G.tally.fasta" "../trimmed/134R.tally.fasta" 
+0

期待される出力は何ですか? – akrun

+0

100G、100R、106G ... – user2300940

+0

あなたの名前は 'substr(basename(colnames)、1,4)'または 'sub( '。* /(\\ d + \ w))\\です。 。* '、' \\ 1 '、colnames) ' – alistaire

答えて

2

私たちは、列名から部分文字列を抽出するために?basenamesubを使用することができます。変更を反映するために出力を列名に戻します。

colnames(df.iso) <- sub("\\..*", '', basename(colnames(df.iso))) 

我々はbasenameを使用したくない場合は、subも単独で使用することができます。 @ Akrunの二番目の答えに同様

colnames(df.iso) <- sub("([^/]+/){2}([^.]+).*", 
           "\\2", colnames(df.iso)) 
+0

なぜbasename? – user2300940

+0

@ user2300940これは、最後のパス区切り文字までのすべてのパスを削除して、部分文字列の抽出を容易にします – akrun

1

colnames(df.iso) <- sub("[^0-9]+([0-9]+[A-Z])\\.tal.*", "\\1", colnames(df.iso)) 

もトリックを行う必要があります。彼の最初の方法はおそらく早いですが、おそらくここでは関係ありません。

関連する問題