R 连续数字之间的短跑
我想在非连续数字的位置拆分一个数值向量。所以我想转换下面的数值向量 数据=c(18,20:25,28:30) 串 数据=c(“18”、“21”、“22”、“23”、“24”、“25”、“28”、“29”、“30”) 有办法吗?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)
非常感谢您考虑我的问题。在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.我总是忘记它。