この問題はかなり長い間私を悩ませてきました。私はいつもforループでそれを回避していますが、これを行うためのより迅速でエレガントな方法を見つける時がやっと来たと思います。
例として、アイテムが赤か青かに関する情報を含むデータフレームがあるとします。情報は次のように表示されます。
item.df <- data.frame(Item=seq(1,5), Red=c("Y", "Y", "N", "N", "N"), Blue=c("N", "N", "Y", "Y", "N"))
明らかに、これはこの情報を表すための最も凝縮された方法ではありません。2つの別々の赤と青の列を用意する代わりに、「赤」、「青」、または「どちらでもない」を含む1つのアイテムの色の列が必要です(またはNAも使用できます)。
明らかに、これは、空のItem.Color列を作成し、個々の行をループして入力することで実現できます。しかし、これを行うためのより迅速な方法があると確信しています。
私が真のR初心者だった頃、私は次の方法でそれをやろうとしました。
item.df$Item.Color <- if(item.df$Red=="Y"){"Red"}
しかし、ifステートメントはitem.df $ Redの最初の要素のみを読み取るため、これが機能しないことをすぐに知りました。
do.call()またはapply()関数の1つを使用してこれを実現する方法はありますか?私は試みましたが、私が望んでいたことを完全に実行させることはできませんでした。あなたが提供できるかもしれない洞察を事前に感謝します!
psまた、この質問のより良いタイトルの提案を聞いていただければ幸いです。私にとって、それは常に質問をする上で最も難しい部分のようです。