然后,对于每个列,采用数据帧和列列表的R函数将二进制化变量添加到原始数据帧

时间:2018-05-25 07:41:23

标签: r function

此功能不起作用,但如果我尝试代码而不使其成为一个功能,它就可以工作。我无法理解为什么。 可以在此处找到数据:https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv

{{1}}

1 个答案:

答案 0 :(得分:0)

以下是您的功能的正确版本:

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))