2017-06-09 6 views
2

私はRの学習者であり、かなり基本的な質問があります。2つの他の列の文字値で条件付きの新しい列を作成する

投稿された質問に関連する2つの列を持つedataというデータセットがあります。これらはGazeCueとTargetLocationです。他の2つの列の値に基づいて "Cued"または "Uncued"として表示されるCueTypeという新しい列を作成したいとします。

GazeCueがRightGazePic1.pngに等しく、TargetLocationがTargetRと等しい場合、新しいCueType列は「Cued」と表示されます。同様に、GazeCueがLeftGazePic1.pngに等しく、TargetLocationがTargetLに等しい場合、CueType列は再び「Cued」として表示されます。値の他のバリエーションは、CueTypeに "uncued"として表示されます。

私が望むものの例を以下に貼り付けます。

GazeCue     TargetLocation   CueType   

RightGazePic1.png  TargetR     Cued    
LeftGazePic1.png   TargetL     Cued    
RightGazePic1.png  TargetL     Uncued   
LeftGazePic1.png   TargetR     Uncued   

私はifelseを使用してこのコードを完成しようとしていますが、運がありません。アドバイスをいただければ幸いです。

答えて

3

これはかなり基本的です。一つの方法は、PNGとターゲットの両方からLとRを抽出し、ifelseを使用して、それらを比較するために、次のようになります。

CueType <- ifelse(substr(GazeCue, 1,1) == substr(TargetLocation, 7,7), 
        "Cued", 
        "Uncued") 

名はもう少しを変えることができた場合は、関連する情報を抽出するためにgsubを見てみましょう比較の前に文字列から。

+0

substr(TargetLocation、7,7)に対する回答を編集することで、望ましい結果が得られました。フレキシブルなRがどのようにできるか私のような初心者に見せます。もう一度、あなたの助けをありがとう。 – Rstudent

+1

@Rstudent明らかに...それは金曜日です、私の数え方は週の初めと同じくらい良くはありません:-) –

1

また、Rは、ベクトルを再利用しているという事実を利用することができます:あなたはこの試みることができる

ix <- (substr(df$GazeCue,1,1) == substring(df$TargetLocation,7)) + 1 
df$CueType <- c("Uncued","Cued")[ix] 
+0

少しわかりにくくハッキリですが、 'ifelse'よりも速いです。どちらの場合も、わかりやすくするために 'substr'を使いますが、それは他のものよりもスタイルです。 –

+0

@JorisMeys両方の点で合意しました! – h3rm4n

0

edata[,3] <- NA #add a new column 
names(edata)[3] <- "CueType" #add a name column 

for (i in 1 : nrow(edata)) { 
    if (edata$GazeCue[i] == 'RightGazePic1.png' & edata$TargetLocation[i]== 
'TargetR') { 
    edata[i,3] <- "Cued" 
    } else if (edata$GazeCue[i] == 'LeftGazePic1.png' & data$TargetLocation[i] 
=='TargetL') { 
    edata[i,3] <- "Cued" 
    } 
    else { 
    edata[i,3] <- "Uncued" 
    } 
} 

テストを、それが正常に動作するはずです!

関連する問題