【发布时间】:2016-11-11 05:16:55
【问题描述】:
所以我在 R 中有一个数据框,其中一列是几个因素的变量,我想为每个因素创建一些虚拟变量,但是当我编写一个循环来执行此操作时,我得到一个错误。
因此,例如,如果列由各种因素 a、b、c 组成,并且我想为每个因素编写一个 1 或 0 的虚拟变量,我必须创建一个的代码是:
h = rep(0, nrow(data))
for (i in 1:nrow(data)) {
if (data[,1] == "a") {
h[i] = 1
} else {
h[i] = 0
}
}
cbind(data, h)
这给了我错误消息“条件的长度 > 1,并且只使用第一个元素”我在本网站的其他地方看到说我应该尝试编写自己的函数来解决问题并避免 for 循环而且我真的不明白a)如何通过编写函数(至少立即)来解决这个问题b)将其作为函数而不是循环的好处。
我最后还使用 ifelse 语句创建每个向量,然后 cbind 将其添加到数据框中,但我们非常感谢您的解释。
【问题讨论】:
-
data[,1]是一个向量,if未向量化。data$h <- data[,1]=="a" -
啊抱歉,我发帖之前绝对没有看到
标签: r if-statement for-loop dataframe