R - 生成一个字符串,通过将序列值替换为序列的起始值和结束值来汇总整数向量

dig*_*aps 6 r

我正在寻找一种有效的方法来简化整数向量作为汇总字符串,以便将其格式化为适合表格单元格.

例如:

c(1, 2, 3, 4, 6, 8, 9, 10)
Run Code Online (Sandbox Code Playgroud)

应该产生

"1-4, 6, 8-10"
Run Code Online (Sandbox Code Playgroud)

这在打印向量中的所有元素将很快使表格不可读的情况下变得特别有用.

例如

c(1:50, 53, 89:120)
Run Code Online (Sandbox Code Playgroud)

应该产生

"1-50, 53, 89-120"
Run Code Online (Sandbox Code Playgroud)

Vin*_*ynd 9

您希望将元素分组为连续整数的块. diff可以告诉您两个连续元素是否在同一个块中, cumsum可以对这些块进行编号,并tapply可以提取每个块的第一个和最后一个元素.

x <- c(1:50, 53, 89:120)
y <- tapply( x, c(0,cumsum(diff(x) != 1)), range )
# Format the result
y <- sapply(y, function(u) 
  if(u[1]==u[2]) u[1] 
  else paste(u,collapse=":")
)
paste(y, collapse=", ")
Run Code Online (Sandbox Code Playgroud)