在R中的向量中查找连续值

在R中的向量中查找连续值,r,R,如果我有这样一个向量: dat <- c(1,2,3,4,5,19,20,21,56,80,81,92) 只需将split与diff结合使用即可: > split(dat, cumsum(c(1, diff(dat) != 1))) $`1` [1] 1 2 3 4 5 $`2` [1] 19 20 21 $`3` [1] 56 $`4` [1] 80 81 $`5` [1] 92 这并不完全符合您的要求,但“R.utils”软件包有两个相关的有趣功能: library

如果我有这样一个向量:

dat <- c(1,2,3,4,5,19,20,21,56,80,81,92)

只需将
split
diff
结合使用即可:

> split(dat, cumsum(c(1, diff(dat) != 1)))
$`1`
[1] 1 2 3 4 5

$`2`
[1] 19 20 21

$`3`
[1] 56

$`4`
[1] 80 81

$`5`
[1] 92

这并不完全符合您的要求,但“R.utils”软件包有两个相关的有趣功能:

library(R.utils)
seqToIntervals(dat)
#      from to
# [1,]    1  5
# [2,]   19 21
# [3,]   56 56
# [4,]   80 81
# [5,]   92 92
seqToHumanReadable(dat)
# [1] "1-5, 19-21, 56, 80-81, 92"
我认为这是正确的。这里是一个tidyverse,它将向量放入一个tibble(数据帧)中

库(tidyverse)
#图书馆(dplyr)
#图书馆(tidyr)
df%
tibble(dat=)
#使用lag()
df%>%
分组依据(seq_id=cumsum(dat!=lag(dat)+1 | is.na(dat!=lag(dat)+1))%>%
nest()
#使用diff()
df%>%
分组依据(seq_id=cumsum(c(1,diff(dat))!=1))%>%
nest()

当然,您不需要将结果组嵌套到列表列中,而是可以执行某种摘要操作。

不,这个问题以前已经讨论过很多次了。……哦,那么它是重复的吗?请将其标记为重复的,然后链接到现有的组。毫无疑问,我只是毫无例外地厌恶偶像化……;)
library(R.utils)
seqToIntervals(dat)
#      from to
# [1,]    1  5
# [2,]   19 21
# [3,]   56 56
# [4,]   80 81
# [5,]   92 92
seqToHumanReadable(dat)
# [1] "1-5, 19-21, 56, 80-81, 92"
library(tidyverse)
# library(dplyr)
# library(tidyr)

df <- c(1,2,3,4,5,19,20,21,56,80,81,92) %>%
  tibble(dat = .)

# using lag()
df %>%
  group_by(seq_id = cumsum(dat != lag(dat) + 1 | is.na(dat != lag(dat) + 1)) %>%
  nest()

# using diff()
df %>%
  group_by(seq_id = cumsum(c(1, diff(dat)) != 1)) %>%
  nest()