dfrm$dc <- c("dog", "cat", "rabbit")[ findInterval(dfrm$b, c(1, 2.5, 5.5, Inf)) ]
findInterval アプローチは、ネストされたifelse
戦略よりもはるかに高速であり、ネストされていないステートメントをループする関数よりもはるかに高速であると推測していますif
。より大きなデータを扱っている人は、効率の悪いアルゴリズムを選ぶと違いに気づきます。
これは実際には要求に対応していませんでしたが、R の新しいユーザーが問題に対する最も表現力豊かで効率的なアプローチを知っているとは限りません。「IF を使用してください」という要求は、2 つの主要なマクロ統計プロセッサ SPSS と SAS に典型的なコーディング手法を変換しようとする試みのように聞こえました。Rif
制御構造は、最初の位置への引数が最初の要素に対してのみ評価されるため、通常、列を再コーディングするための効率的なアプローチではありません。それ自体では列を処理しませんが、ifelse
関数はそれを行います。cut
関数はここで (適切なパラメータbreaks
とパラメータを使用して) 使用された可能性がありますが、文字値の代わりに値labels
が配信されたはずです。factor
のfindInterval
アプローチは、複数のレベルを返す機能のために選択されました (単一でifelse
はできません)。ifelse
約 2 ~ 3 レベルのネストの後、チェーンまたはネスト 's はすぐに見苦しく混乱するようになると思います。