【发布时间】:2017-01-18 17:09:12
【问题描述】:
demo 是数据集的名称。 Salary.Slab 是变量的名称。 我在 for 循环中使用 if else 语句来创建存储桶。
head(demo$Salary.Slab)
[1] 5 7 1 6 NA NA
列中有一些缺失值。我知道 if 语句不适用于 NA 值,因此我使用 is.na 编写了以下代码
for( i in nrow(demo))
{
if(is.na(demo$Salary.Slab[i])){
demo$salary = "k"
}else if(demo$Salary.Slab[i] == 1){
demo$salary = "Very Low"
}else if(demo$Salary.Slab[i] == 3) {
demo$salary = "Very Low"
}else if(demo$Salary.Slab[i] == 4){
demo$salary = "Low"
}else if(demo$Salary.Slab[i] == 5){
demo$salary = "Low"
}else if(demo$Salary.Slab[i] == 6){
demo$salary = "Low"
}
}
salary 是我创建的用于存储存储桶值的新变量(“非常低”、“低”等...)
但是当我运行上面的代码时,我得到了每一行中的所有“k”值。而我应该只在 Salary.Slab = NA 和 Salary.slab == 1 的“非常低”的地方得到“k”,依此类推。请告诉我哪里做错了。
【问题讨论】:
-
每次都应该是
demo$salary[i]而不是demo$salary? -
您的条件很好,但是您的分配,例如
demo$salary = "k",分配了整个向量,而不是ith 元素。正如安德烈所说,将[i]添加到分配行。或查看ifelse了解矢量化方法。
标签: r if-statement for-loop boolean