R:将矢量输出更改为多个范围

时间:2018-06-08 15:57:50

标签: r classification

我使用Jenks Natural Breaks通过BAMMtools包在RStudio版本1.0.153中分割我的数据。输出是一个向量,显示我的数据集中出现自然中断的位置,如下所示:

[1] 14999 41689 58415 79454 110184 200746

我想获取上面的输出并创建由中断推断的范围。例如:14999-41689, 41690-58415, 58416-79454, 79455-110184, 110185-200746

我可以在R Studio中使用任何功能来完成此任务吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

输入数据

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

如果您希望将范围作为字符

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"

如果您想要每个范围内的实际数字列表,您可以

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

答案 1 :(得分:1)

您绝对可以创建自己的函数来生成您正在寻找的确切输出,但是您可以使用cut函数来提供类似这样的函数:

# 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]"