我有一个人员职业测量数据集。这个职业每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个系列,在第三个向量中有三个系列。
答案 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