假设我有以下数字向量:
vec = c(1, 2, 3, 5, 7, 8, 9, 10, 11, 12)
我正在寻找一个函数,它将创建一个字符串,以人类的方式总结数字列表,即
"1-3, 5, 7-12"
我怎么能在R中这样做?
有没有办法在R中编码增加的整数序列,类似于使用行程编码(rle)编码运行长度?
我将举例说明:
类比:行程编码
r <- c(rep(1, 4), 2, 3, 4, rep(5, 5))
rle(r)
Run Length Encoding
  lengths: int [1:5] 4 1 1 1 5
  values : num [1:5] 1 2 3 4 5
期望:序列长度编码
s <- c(1:4, rep(5, 4), 6:9)
s
[1] 1 2 3 4 5 5 5 5 6 7 8 9
somefunction(s)
Sequence lengths
  lengths: int [1:4] 5 1 1 5
  value1 : num [1:4] 1 5 5 5
编辑1
因此,somefunction(1:10)将给出结果: …
考虑以下以逗号分隔的数字字符串:
s <- "1,2,3,4,8,9,14,15,16,19"
s
# [1] "1,2,3,4,8,9,14,15,16,19"
是否可以将连续数字的运行折叠到其相应的范围内,例如1,2,3,4上面的运行将折叠到范围内1-4。所需的结果类似于以下字符串:
s
# [1] "1-4,8,9,14-16,19"
我想为R中的数字生成连续引用数字.如果数字是连续的,则数字应用连字符分隔.否则数字用逗号分隔.例如,数字1, 2, 3, 5, 6, 8, 9, 10, 11 and 13应该是1-3,5,6,8-11,13.
这个问题之前已经回答过c#,我编写了一个适用于R的函数,但是这个函数可以改进.我发布此问题作为其他可能有类似需求的参考.如果您发现R的类似问题(我没有),请投票结束,我将删除该问题.
下面的功能不是很优雅,但似乎可以完成这项工作.如何使功能更短更优雅?
x <- c(1,2,3,5,6,8,9,10,11,13)
library(zoo) ## the function requires zoo::na.approx function 
##' @title Generate hyphenated sequential citation from an integer vector
##' @param x integer vector giving citation or page numbers
##' @importFrom zoo na.approx
seq.citation <- function(x) {
## Result if lenght of the integer vector is 1. 
if(length(x) == 1) return(x) else {
## Sort
x <- …如果我有一个数字向量[1 2 3 4 7 8 9 10 15 16 17],我该如何拆分它以便我返回多个向量来分隔该向量的连续元素?即[1 2 3 4] [7 8 9 10] [15 16 17].我在matlab中找到了如何做到这一点的答案,但我只使用了R.
谢谢.