Jackie CL
Jackie CL

Reputation: 11

R: Change Vector Output to Several Ranges

I am using Jenks Natural Breaks via the BAMMtools package to segment my data in RStudio Version 1.0.153. The output is a vector that shows where the natural breaks occur in my data set, as such:

[1] 14999 41689 58415 79454 110184 200746

I would like to take the output above and create the ranges inferred by the breaks. Ex: 14999-41689, 41690-58415, 58416-79454, 79455-110184, 110185-200746

Are there any functions that I can use in R Studio to accomplish this? Thank you in advance!

Upvotes: 1

Views: 45

Answers (2)

AntoniosK
AntoniosK

Reputation: 16121

You can definitely create your own function that produces the exact output you're looking for, but you can use the cut function that will give you something like this:

# example vector
x = c(14999, 41689, 58415, 79454, 110184, 200746)

# use the vector and its values as breaks
ranges = cut(x, x, dig.lab = 6)

# see the levels
levels(ranges)
#[1] "(14999,41689]"   "(41689,58415]"   "(58415,79454]"   "(79454,110184]"  "(110184,200746]"

Upvotes: 1

IceCreamToucan
IceCreamToucan

Reputation: 28685

Input data

x <- c(14999, 41689, 58415, 79454, 110184, 200746)

If you want the ranges as characters you can do

y <- x; y[1] <- y[1] - 1 # First range given in question doesn't follow the pattern. Adjusting for that

paste(head(y, -1) + 1, tail(y, -1), sep = '-')
#[1] "14999-41689"   "41690-58415"   "58416-79454"   "79455-110184"  "110185-200746"

If you want a list of the actual sets of numbers in each range you can do

seqs <- Map(seq, head(y, -1) + 1, tail(y, -1))

Upvotes: 1

Related Questions