if文

2017-06-16 16 views
0

私はそれが簡単に修正だ疑いと私は、Rに新たなんだ(と一般的にコーディング)、これは愚かな質問であれば謝罪ので、正しく機能させる方法を理解していないだけですが、わかります。if文

私は、既存の列に含まれる値に依存している文字列を含むデータフレームに新しい列を追加したいです。行がPetal.Width列の「0.2」の値が含まれている場合、虹彩データと、例えば、私は、新しい列に「応答文字列1」のような文字列を貼り付けたいです。そしてPetal.Width = 0.4の値ならば、その後、同じ列に「レスポンス文字列2」を貼り付けます。

私はherehereの助けを借りてそれを理解しようとしましたが、動作させることができませんでした。

MyFunction <- function(petalWidth){ 
    if (petalWidth == 0.2){ 
    iris$NewColumn <- paste("Response String 1") 
    } 
} 

apply(iris, 1, MyFunction(iris$Petal.Width)) 

このエラーを思い付く:私はfor声明に探しを含め、いくつかの他の方法を試してみた

Error in get(as.character(FUN), mode = "function", envir = envir) : 
object 'Response String 1' of mode 'function' was not found 
In addition: Warning message: 
In if (petalWidth == 0.2) { : 
the condition has length > 1 and only the first element will be used 

は、これまでのところ、私はこのようなものを持っています。私は本当にこの関数を正しく動作させるためにどのように構築するのかは分かりません。どんなアイデアも大変ありがとうと思います。ありがとう!

答えて

1

条件に基づいて新しい列を作成する方法はたくさんあります。そこループする必要はならないか、一度にすべての行に基づいて行動することができますRの「ベクトル化」の操作使用しなければならないこの種のものを申請してください:ベクトル化操作は非常に速く、一般的

iris$NewColumn = ifelse(iris$Petal.Width == 0.2, "Response String 1", "Other") 

を、となります多くの場合、あなたは列の要素ごとに追加しようとすると、予期しない問題が発生する可能性がより良い仕事。

+0

うまく機能し、これをありがとうございました。もしwidth == 0.2ならpaste "RS1"、width == 0.3なら "RS2"、width == 0.5なら "RS3"を貼り付けますか?私はそれを 'if'で動作させることはできません。' df $ NewColumn = if(df $ Petal.Width == 0.2){paste( "string 1")} "ペースト"文字列1 "幅。 – heds1

+0

http://www.statmethods.net/management/variables.html#recoding-variables – Marius

+0

を参照してください。それは素晴らしいです。どうもありがとうございました – heds1