bugfix> r > 投稿

この機能は機能しませんが、機能にせずにコードを試してみると機能します。理由を理解できません。 データはここにあります:https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv

df.data<- read.csv("D:/My R project/data/gapminderDataFiveYear.csv")
namearray<- c(levels(unlist(df.data[, "continent"])))
binarycoladd<- function(a1, a2) {
 al1<- length(a2)
  al2<- nrow(a1)
  for (i in 1:al1) {
cname<- paste("binary", a2[i], sep = "_")
a1[cname]<- NA
    for (j in 1:al2) {
      a1[j,cname] = ifelse (a1[j,"continent"] == a2[i], 1, 0)
    }
  }
}

回答 1 件
  • 関数の正しいバージョンは次のとおりです。

    df.data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
    namearray <- as.character(levels(df.data$continent))
    binarycoladd <- function(a1, a2) {
      for (cn in a2) {
        cname <- paste0("binary_", cn)
        a1[cname] <- (a1$continent == cn)
      }
      return(a1)
    }
    binarycoladd(df.data, namearray)
    
    

    (結果 ... <- binarycoladd(...) を保存することを忘れないでください )
    ここに私がそれをする方法があります:

    binarycols <- function(x) {
      xlev <- levels(x)
      M <- sapply(xlev, '==', x)
      colnames(M) <- paste0("binary_", xlev)
      return(M)
    }
    cbind(df.data, binarycols(df.data$continent))
    
    

    ところで:
    $continent を使用する場合  回帰モデルでは、論理ダミー変数は関数 lm() によって内部的に生成されます  -したがって、それらを明示的に生成する必要はありません。

    df.data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
    summary(lm(lifeExp ~ continent + year, data=df.data))
    
    

あなたの答え