【发布时间】:2017-12-04 00:20:32
【问题描述】:
我有一个名为“crimes”的数据框,其中包含一个“pre_rate”列,表示某项法律实施之前的犯罪率。我想使用嵌套的 if-else 循环将每个速率放在“rate_category”列中。我有以下代码:
crimes$rate_category =
with(crimes, ifelse(pre_rate > 0.26 && pre_rate < 0.87, 1,
ifelse(pre_rate > 1.04 && pre_rate < 1.94, 2,
ifelse(pre_rate > 2.03 && pre_rate < 2.96, 3,
ifelse(pre_rate > 3.10 && pre_rate < 3.82, 4,
ifelse(pre_rate > 4.20 && pre_rate < 11.00, 5, "NA"))))))
crimes
这是一个可重现的例子:
pre_rate = c(0.27, 1.91, 2.81, 3.21, 4.80)
crimes = data.frame(pre_rate)
crimes
但是,当我使用原始数据框运行循环时,“rate_category”列中的所有级别都错误地设置为 1。上面的循环似乎有什么问题?
【问题讨论】:
-
小心使用
&&:它只比较向量的第一个元素。&进行元素比较,这可能是您想要的。 -
另外我认为在你的最终
ifelse中有一个字符"NA"会通过将其转换为字符来搞乱列。只需使用NA,不要加引号。 -
你的目标真的是有差距吗?例如,您是否希望 2 的 pre-rate 为 NA?
-
@Hugh 所有的比率都是小数点后 8 位,所以我只是将它们四舍五入到百分之一。会有差距,但不会包含任何相关数据。
标签: r if-statement