Reputation: 1484
I have an easy question to figure out:
value
1000
2500
5080
10009
I want to specify value
to an interval:
value Range
1000 0-1000
2500 1001-5000
5080 5001-10000
10009 10001-20000
I try this:
dt[, Range := ifelse(value < 1001, "0-1000", ifelse(1000 < value < 5001, "1001-5000", ifelse(5000 < value < 10001, "5001-10000", "10001-20000")))
However, I got Error: unexpected '<' in "dt[, Range := ifelse(value < 1001, "0-1000", ifelse(1000 < value <"
Any help?
EDIT:
This question is not asking for the best way to convert a continuous variable to a factor. It is asking for debugging help with the reproducible example:
library(data.table)
dt <- data.table(value = c(1000, 2500, 5080, 10009))
dt[, Range := ifelse(value < 1001, "0-1000", ifelse(1000 < value < 5001, "1001-5000", ifelse(5000 < value < 10001, "5001-10000", "10001-20000")))
# produces the error above
Upvotes: 2
Views: 3728
Reputation: 7620
Like many (some) errors, it means what it says. Unlike python, R can't interpret 1000 < value < 5001
. Instead you need to use 1000 < value & value < 5001
library(data.table)
dt <- data.table(value = c(1000, 2500, 5080, 10009))
dt[, Range := ifelse(value < 1001, "0-1000", ifelse(1000 < value & value < 5001, "1001-5000", ifelse(5000 < value & value < 10001, "5001-10000", "10001-20000")))]
dt
value Range
1: 1000 0-1000
2: 2500 1001-5000
3: 5080 5001-10000
4: 10009 10001-20000
As @akrun mentioned, you may be better off with a factor. Here's an example:
dt[, Range := cut(value, breaks = c(0, 1001, 5001, 10001, 20001), labels = c("0-1000", "1001-5000", "5001-10000", "10001-20000"))]
This produces a data.table that displays the same way, but extracting the Range
column will give you a factor corresponding to the ranges.
Upvotes: 5