web-dev-qa-db-ja.com

データフレームの数値列に文字を追加する

私はこのようなデータフレームを持っています:

  V1      V2      V3 
1  1 3423086 3423685 
2  1 3467184 3467723 
3  1 4115236 4115672 
4  1 5202437 5203057 
5  2 7132558 7133089 
6  2 7448688 7449283 

V1列を変更し、番号の前にchrを追加したいと思います。ちょうどこのような:

  V1      V2      V3 
1  chr1 3423086 3423685 
2  chr1 3467184 3467723 
3  chr1 4115236 4115672 
4  chr1 5202437 5203057 
5  chr2 7132558 7133089 
6  chr2 7448688 7449283 

Rでこれを行う方法はありますか?

17
Lisann

正規表現パターン「^」(文字クラスの括弧の外側)は、「文字」クラスの項目(他のコンピューター言語では「文字列」とも呼ばれます)の最初の文字の直前のポイントを表します。これは、ベクトル内の各「文字」要素の先頭を「chr」の語幹に置き換えるだけです。 「数値」入力値を「文字」に暗黙的に強制するため、結果のモードが変更されます。

_> dat$V1 <- sub("^", "chr", dat$V1 )
> dat
    V1      V2      V3
1 chr1 3423086 3423685
2 chr1 3467184 3467723
3 chr1 4115236 4115672
4 chr1 5202437 5203057
5 chr2 7132558 7133089
6 chr2 7448688 7449283
_

もちろん、paste("chr", dat$V1, sep="")を使用することもできますが、正規表現ソリューションの方が適切かもしれないと思いました。

25
42-

sprintfは、単純な連結よりもはるかに強力です。

dat$V1 <- sprintf('chr%i', dat$V1)
7
YvanR

interactionを使用することもできます。

df$V1 <- interaction( "chr", df$V1, sep = "")
df

またはsqldfを使用する:

library(sqldf)    
df$V1 <- as.character(df$V1)
df$V1 <- sqldf("select 'chr'|| V1 as V1 from df") 
4
mpalanco