2016-09-30 2 views
4

カラムの値を対応する文字列に置き換える必要があります。私の検索では、私が探しているものとよく似た答えで同様の質問に出くわしましたが、私のニーズに正確に合うものはありません。私は初心者なので、このコードがどのように機能するかを説明できると助けになります。Rでのデータ操作:列の値を文字列で体系的に置き換える

私はキー1 =アップルを使用して、このようになります。データセットにこの

A B C D 

1 1 64 20 1 
2 2 64 20 3 
3 3 64 20 3 
4 4 64 20 1 
5 5 64 20 2 

のようなデータセットから行ってみたい

、2 =カメックス、3 =カルーセル

A B C D 

1 1 64 20 Apple 
2 2 64 20 Carousel 
3 3 64 20 Carousel 
4 4 64 20 Apple 
5 5 64 20 Blastoise 

私は

df$D <- "label" 

などの値を変更するだけでよいことを理解してください。

しかし、 "label"部分を対応する値に一致させる方法はわかりません。

ありがとうございます!

+0

'DFする$ D =ファクター(DFます$ D、レベル= 1文字に変換する必要があります:3、ラベル= cで( "アップル"、 "カメックス"、 "Carousel")) 'は良いアプローチです。 – Gregor

答えて

2

ここで1つのbaseRオプションはmergeを使用します。まず、ラベルにD列の値をマップするデータフレームを作成します。

labels <- data.frame(D=c(1,2,3), label=c("Apple", "Blastoise", "Carousel")) 

その後のマージ操作を行います。

result <- merge(df, labels, by="D")[, union(names(df), names(labels))] 
:あなたは、元の列の順序、使用を保持したい場合は

result <- merge(df, labels, by="D") 

result 
    D A B C  label 
1 1 1 64 20  Apple 
2 1 4 64 20  Apple 
3 2 5 64 20 Blastoise 
4 3 2 64 20 Carousel 
5 3 3 64 20 Carousel 

+0

これはかなりうまくいきます!ありがとうございました!唯一の欠点は、それが実際には比較的小さい列順序を保持していないことです。 – kevinchangwang

1

これを行うにはいくつかの方法があります。

列Dをインデックスとして使用する:

df$Dは、整数1,2および3を含むベクトルです。それらをインデックスの集合と考える必要があります。たとえば、次のように

df$D = c(1,3,3,1,2) 

別のベクターは、名前が含まれています:あなたはv_namesの指標としてdf$Dを使用する場合

v_names = c("Apple","Blastoise","Carousel") 

はどうなりますか?

v_names[df$D] 
[1] "Apple"  "Carousel" "Carousel" "Apple"  "Blastoise" 

あなたはこれらのインデックス値を交換する名前を持つインデックス(df$D)のコレクションと同じ長さのベクトルを取得します。

ifelseの使用:それはお勧めできませんので

このように、現在のように多くのifelseなどの名前を必要とします。

ifelse(df$D==1,"Apple",ifelse(df$D==2,"Blastoise","Carousel")) 
[1] "Apple"  "Carousel" "Carousel" "Apple"  "Blastoise" 

ご覧のとおり、ifelseがネストされています。異なるケースが3つ以上ある場合は読みにくい。

お名前とレベルを変更、その後、考慮するためにあなたの列を変換する場合の要因

を使用する:

df$D = as.factor(df$D) 
levels(df$D) = c("Apple","Blastoise","Carousel") 

> df$D 
[1] Apple  Carousel Carousel Apple  Blastoise 
Levels: Apple Blastoise Carousel 

ここに不都合が列が要因であるということです。あなたは文字列で何かをしたい場合は、最初

df$D = as.character(df$D)