2016-11-06 4 views
0

列にある3つの可能な値のいずれかに基づいて新しい列を作成する必要があります。R新しい列に値を割り当てるロジックがある場合

これらはルールです:

If it has c somewhere in it, the new column should be assigned "third" 
If it has b, but not c somewhere in it, the new column should be assigned "second" 
If it has a but not b or c somewhere in it, the new column should be assigned "first" 

ここに私のサンプルコードは

x <- c('a,b,c', 'a', 'a,b') 

myLetters <- data.frame(x) 

setnames(myLetters, "theLetter") 

sapply(myLetters$, theLetter, function(x) 
if ('c' %in% myLetters$theLetter) { 
    myLetters$letterStatus <- "third" 
} else if ('b' %in% myLetters$theLetter) { 
    myLetters$letterStatus <- "second" 
} else if ('a' %in% myLetters$theLetter) { 
    myLetters$letterStatus <- "first" 
} 
) 

だこれは私がmyLetters $ letterStatusのためのサンプルデータに基づいて、行ごとに必要なデータです。

Row 1: third 
Row 2: first 
Row 3: second 

現在、私は「最初の」「最初の」「最初の」「最初の」ものを取得していますが、理由はわかりません。

私はこれをどのように解決することができ、なぜ私は各行の最初の理由を知っていますか?

おかげで結果を得るために、ベクトル化(私たちにRの贈り物)を使用して

答えて

0

は:

x <- c('a,b,c', 'a', 'a,b') 
myLetters <- data.frame(x) 
# myLetters 
# x 
# 1 a,b,c 
# 2  a 
# 3 a,b 

myLetters$x1 = ifelse(grepl("c",myLetters$x), "third", ifelse(grepl("b",myLetters$x),"second", "first")) 
+0

おかげで、それがあれば、他の代わりifelseの使用sapplyコードよりもうまくかつ簡単に働きました。 – Jazzmine

+0

私は、フォローアップの質問があります:myLetters $ x1の列名を設定するにはどうすればいいですか? View(myLetters $ x1)の名前は、このコマンド(names(myLetters $ letterRating))で示されているように実際にはNullですが、c(3,1,2)のように解析された値のセットです。列の名前は?私はこのリンクを参照してくださいhttp://stackoverflow.com/questions/16030728/how-to-name-the-unnamed-first-column-of-a-data-frameしかし、名前を割り当てるだけですありがとう – Jazzmine

+0

実際には、私は自分の環境をリフレッシュした後にうまくいきました。ありがとう – Jazzmine

関連する問題