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