bugfix> r > 投稿

データセットの変数の1つを除くすべてを変換し、これらの新しい変換された変数を新しいデータセットに含めたいと考えています。これはそれほど難しくないはずですが、いくつかの問題に直面しています。私がやろうとしている変換は、ランクの最小最大ノルムです。私は次のコードを実行しています:

#create min-max norm function
normalize <- function(x) {
    return((x-min(x))/(max(x)-min(x)))
}
cols <- c(1:ncol(dt))
dt[cols] <- normalize(rank(dt[cols]))

ただし、このコードを実行すると、次のエラーが表示されます。

Error: Can't use matrix or array for column indexing

誰かが私を助けてくれないかと思っていました。前もって感謝します。

回答 1 件
  • rank  および normalize  どちらもベクトルを取ります。それらにデータフレームを与えることはできません。

    sapply  および lapply  のための古典的なユーティリティです適用するデータフレームの列への関数。いくつかの方法:

    # one step with an anonymous function, calling both normalize and rank
    dt[cols] = lapply(dt[cols], function(x) normalize(rank(x)))
    
    

    ただし、エラーは cols を示唆しているようです  オブジェクトは行列または配列です。そのため、 cols  あなたはそれがそうだと思うものです。そして、上記の方法は、 dt  は data.frame です  (または data.table 、または tibble )。 dt の場合  は matrix です 、 array 、または他の何か、期待どおりに動作しません。 str(dt) を見てください  チェックします(問題が解決しない場合は、質問にその情報を編集します)。     #2ステップ、1つずつ     dt [cols] = lapply(dt [cols]、ランク)     dt [cols] = lapply(dt [cols]、正規化)

あなたの答え