ifelse在r中分类

时间:2018-06-19 19:39:16

标签: r if-statement dplyr

我正在尝试根据x变量的范围创建一个新的分类变量类别。

这是我要做的:

data$category <- ifelse(data$x >= 780, 6,
                      ifelse(750 =< data$x <= 779, 5,
                      ifelse(714 =< data$x <= 749, 4,
                      ifelse(679 =< data$x <= 713, 3,
                      ifelse(660 =< data$x <= 678, 2,
                      ifelse(640 =< data$x <= 659, 1, NA))))))

其返回错误:...中出现意外的“ <=”

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

R不支持语法750 =< data$x <= 779。将其更改为750 <= data$x & data$x <= 779。这适用于代码中的所有范围。

答案 1 :(得分:1)

我建议使用cut代替这种方法。

[edit] eipi10在评论中显示了如何执行此操作-但我建议进行两项更改:

 d$cat <- cut(d$x, c(640, 660, 679, 714, 750, 780, Inf)-1 , labels=FALSE)
  • 中断应小于x以包含x(或者您可以使用include.lowest)
  • 如果您设置labels=FALSE,则会自动获得连续的整数作为标签
  • 不需要-Inf作为最低间隔,小于最低间隔的任何东西都会自动设置为零

如您所见,这比拥有许多嵌套的ifelse要容易得多。

一种风格上的东西:调用数据帧data并不是一个好主意-这是基本函数的名称(但是如果执行此操作,则不会立即发生任何事情)。