R 连续数字之间的短跑

R 连续数字之间的短跑,r,R,我想在非连续数字的位置拆分一个数值向量。所以我想转换下面的数值向量 数据=c(18,20:25,28:30) 串 数据=c(“18”、“21”、“22”、“23”、“24”、“25”、“28”、“29”、“30”) 有办法吗? 非常感谢您考虑我的问题。在base R中使用tapply: data = c(18,20:25,28:30) result <- unlist(tapply(data, cumsum(c(FALSE, diff(data) > 1)), function(x)

我想在非连续数字的位置拆分一个数值向量。所以我想转换下面的数值向量 数据=c(18,20:25,28:30)

串 数据=c(“18”、“21”、“22”、“23”、“24”、“25”、“28”、“29”、“30”) 有办法吗?
非常感谢您考虑我的问题。

在base R中使用
tapply

data = c(18,20:25,28:30)
result <- unlist(tapply(data, cumsum(c(FALSE, diff(data) > 1)), function(x) 
           c('-', x)), use.names = FALSE)[-1]

#[1] "18" "-"  "20" "21" "22" "23" "24" "25" "-"  "28" "29" "30"
data=c(18,20:25,28:30)
结果1),函数(x)
c('-',x)),use.names=FALSE)[-1]
#[1] "18" "-"  "20" "21" "22" "23" "24" "25" "-"  "28" "29" "30"

在每组连续数字中,在序列前面加上
“-”

,这里有一个使用
split
+
cumsum

unname(
  unlist(
    sapply(
      split(v, cumsum(c(1, diff(v) != 1))),
      function(x) c("-", as.character(x))
    )
  )[-1]
)

[1] "18" "-"  "20" "21" "22" "23" "24" "25" "-"  "28" "29" "30"
数据

v <- c(18, 20:25, 28:30)

v就像一个符咒。非常感谢。用
tapply
回答得很好+1.我总是忘记它。