以下是我正在尝试做的简单版本。我有以下向量:
wage = 1:10 # Generate a sequence from 1 to 10
我想创建另一个向量wage_level
,这样:
(i )wage_level
如果"low"
小于wage
5
(ii )wage_level
如果normal
等于wage
5
(iii )wage_level
如果high
大于wage
5
我知道我可以使用嵌套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"
(ii )rating
如果2
等于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
向量中的值与我指定的值无关。
还有其他方法可以达到预期的效果吗?
非常感谢您的帮助 :)