1

ロジスティック回帰で使用するには、カテゴリ変数を複数の二分 (「ダミー」) 変数に変換する必要があります。私のデータフレームは次のとおりです。

    tdf <- data.frame(first=sample(c("A", "B", "C", "D"), 100, replace=T),
                      lobe = sample(c("RUL", "RML", "RLL", "LUL", "LLL"), 100, replace=T),
                      continuous=sample(1:100, 100),
                      smoker = sample(c("never", "less20", "more20"), 100, replace=T)
                      )

私は手動で行うことができます

first. <- with (tdf,  factor (first))
dummies <-  model.matrix(~ first.)
dummies <- dummies[,-1]
tdf <- cbind(tdf, dummies)

因子を「最初」と呼ぶことが重要であることに注意してください。(または、より一般的には「変数」)。ダミー変数はこのプレフィックスをそれぞれの名前に継承し、後で簡単に識別できるようにするためです (「変数 1.因子 2」、「変数 1.因子 3」など)。

私の質問は: プログラムで変数名を割り当てる関数を使用してこれを行うにはどうすればよいですか:

dummify <- function(df, vectorOfColIndices) {
  cn <- colnames(df) 
  for (i in vectorOfColIndices) {
    t. <- with (tdf,  factor (df[i])) # temporary factor
    assign (cn[i], t.) # give it the proper 'Variable.' name
    dummies <-  model.matrix(~ ????) # Stuck here: how do I call this newly created structure?
    ...
  }
}

後で次のようにデータ フレームを変換できるようにします。

vd <- c(1,2,4) # columns that need to be converted into dummy vars
df <- dummify(df, vd)
4

2 に答える 2

2

手動でダミーを作成しなければならない状況はあまりないという Dason のコメントに同意します。そして、そうするなら、Anthonyの解決策は問題ありません。私は楽しみのためにこの代替案を提示します:)

dummify <- function(df, vectorOfColIndices) {
  for (i in vectorOfColIndices) {
    var <- paste(names(df)[i], ".", sep="")
    assign(var, df[[i]])
    df <- cbind(df, model.matrix(reformulate(var))[, -1])
  }
  return(df)
}
于 2013-02-23T23:00:38.623 に答える
2
dummify <- function( df , col.indicies.to.add.dummies ) {

    for ( i in names( df )[ col.indicies.to.add.dummies ] ) {

        t. <- with( df , factor( df[ , i] ) )

        dummies <-  model.matrix( ~t. ) 

        colnames( dummies ) <- paste( i , levels( t. ) , sep = "." )

        dummies <- dummies[ , -1 ]

        df <- cbind( df , dummies )

    }

    df
}
于 2013-02-23T22:14:08.160 に答える