以下是示例数据:
dat<-c(1:10,14,17:20,30)我想要的输出格式是:
1-10,14,17-10,30我有一个很大的相似向量,这就是为什么我尝试用R来做它。有没有人能给点提示或建议?非常感谢!
发布于 2020-11-18 15:13:17
可以使用diff创建连续值的组,并在tapply中使用它,如果值的长度大于1,则可以粘贴每个组的第一个和最后一个值。
dat <- c(1:10,14,17:20,30)
result <- as.character(tapply(dat, cumsum(c(TRUE, diff(dat) > 1)), function(x) {
if(length(x) == 1) x else paste(x[1], x[length(x)], sep = '-')
}))
result
#[1] "1-10" "14" "17-20" "30" 如果您希望输出为一个字符串。
toString(result)
#[1] "1-10, 14, 17-20, 30"发布于 2020-11-18 16:36:33
Base R解决方案(在原理上与Ronak的非常相似:
sapply(split(dat, cumsum(c(FALSE, diff(dat) > 1))), function(x){
paste(unique(range(x)), collapse = "-")
}
)https://stackoverflow.com/questions/64888547
复制相似问题