在数字向量中查找模式

时间:2016-04-26 09:34:17

标签: r vector

我有一个人员职业测量数据集。这个职业每15分钟测量一整天,结果是一个96个字母的字符串(例如ARCCCRTOHGDERRRRYYYIJ ......),其中每个字母代表某种职业。

其中一封信(C)代表从家到工作的交通工具,反之亦然,这使我可以在家中和工作中分开。

为了识别那个传输,我使用了

Newdata<-Data%>%
mutate(transport = as.character(gregexpr(pattern="C",String)))

这导致如下:

c(31,32,33,58,59)

在这种情况下,我知道他们在31岁之前和59岁之后都在家。 唉,人们有可能在晚上工作,这导致:

c(44,45)
显然,有些人去上班,回家再去上班(反之亦然)

c(7,8, 31,32, 75,76)

我需要的是一种方法,在第一个向量中,有2个连续数字系列,在第二个向量中只有1个系列,在第三个向量中有三个系列。

2 个答案:

答案 0 :(得分:3)

只需使用diff函数计算相邻值之间的差异:

R> x = c(1, 2, 4, 6, 10)
R> diff(x)
[1] 1 2 2 4

然后,您可以使用其他功能来查询输出。例如which来确定这些差异的位置

R> which(diff(x)==1)
[1] 1

sum添加它们

sum(diff(x) == 1)

答案 1 :(得分:3)

要检测具有连续数字的系列数(这些数字在向量中总是增加),您可以这样做:

foo <- function(x) sum(rle(diff(x))$values==1)

#> foo(c(31,32,33,58,59))
#[1] 2
#foo(c(44,45))
#[1] 1
#foo(c(7,8, 31,32, 75,76))
#[1] 3