从具有2个以上参数的条件创建变量

时间:2013-04-07 19:04:48

标签: r conditional-statements

以下是我正在尝试做的简单版本。我有以下向量:

wage = 1:10 # Generate a sequence from 1 to 10

我想创建另一个向量wage_level,以便:

(i)如果wage_level小于"low",则wage5

如果wage_level等于normal

,则

(ii)wage5

(iii)如果wage_level大于high,则wage5

我知道我可以使用嵌套的ifelse语句来完成它,但正如我之前所指出的,这只是我真正想要做的简化版本,因为我有大约15种替代方案。

修改

下面提供的答案使用了cut()函数,在许多情况下它实际上运行良好。但是,在我的情况下它似乎并没有“起作用”。以下是详细解释。

我能够使用cut()函数创建wage_level向量:

wage = runif(10, 1, 10) # Randomly generate 10 values between 1 and 10

# Here I use the cut() function
wage_level = cut(wage,
                 breaks = c(1, 4, 6, 10),
                 labels = c("low", "normal", "high"),
                 include.lowest = TRUE)
> wage
[1] 5.522422 4.793292 8.161671 5.480415 1.396909 3.403013 4.940242 7.762142 6.364159 4.603998

> wage_level
[1] normal normal high   normal low    low    normal high   high   normal
Levels: low normal high

现在,让我们假设我想使用wage_level向量使用rating函数创建另一个向量(cut()向量)。创建rating向量的条件如下:

(i)如果rating小于"1",则wage_level"low"

如果rating等于2

,则

(ii)wage_level"normal"

(iii)如果rating大于3,则wage_level"high

我的问题是,使用cut()函数不会使rating向量numeric向量成为我选择的值。以下代码不起作用:

rating = cut(as.numeric(wage_level),
                 breaks = c(0, 1, 2, 3),
                 labels = c(1.2, 6.5, 8.9),
                 include.lowest = TRUE)

> as.numeric(rating)
 [1] 2 2 3 2 1 1 2 3 3 2

我这里主要有两个问题:

(i)我更倾向于使用实际字符串(即“低”,“正常”和“高”)而不是标签索引

(ii)rating向量中的值与我指定的值无关。

任何其他方法可以达到预期效果吗?

非常感谢你的帮助:))

1 个答案:

答案 0 :(得分:4)

wage<-1:10
cut(wage,breaks=c(0,4,5,10),include.lowest=T,labels=c("low","normal","high"))
# [1] low    low    low    low    normal high   high   high   high   high  
#Levels: low normal high

如果没有订购矢量怎么办?没有区别:

wage <- runif(10,1,10)
wage
# [1] 8.535146 4.964819 7.228050 9.150132 6.369952 8.451137 8.022293 7.621226
# [9] 1.070368 5.931904

cut(wage,breaks=c(0,4,5,10),include.lowest=T,labels=c("low","normal","high"))
# [1] high   normal high   high   high   high   high   high   low    high  

尽管如此,请注意normal因子应用于4到5之间的值。如果你真的使用reals,那么正好寻找5可能是一个奇怪的选择。