2016-04-26 60 views
2

我有一個測量人員職業的數據集。這種職業每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個序列,在第三個向量中有3個序列。

回答

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 
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) 
+0

@DavidArenburg謝謝並補充。 – csgillespie

+0

我不認爲這是OP想要的。在他的第一個案例中,「x < - c(31,32,33,58,59)」給出了3個系列,而只有兩個系列...... – Sotos