以重复模式标记第二个位置

时间:2015-09-15 15:10:05

标签: r

我有一个数字向量,下面有一个重复的模式(通常是2,3,4,5,6,然后重新开始,但有时一个或多个不会因为假期而在那里等)。我想在每个集合中标记第二次出现(通常是3但不总是如果例如2不存在它将是4我想要标记)。任何想法如何标记基本上是一周的第二个工作日?

代码示例:

test_vector <- c(2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 
2, 3, 4, 2, 3, 4, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 
6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 
2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 
3, 4, 5, 6, 2, 3, 4, 5, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 
6, 2, 3, 4, 5, 6, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 3, 
4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 
5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 
6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 
2, 3, 4, 5, 6, 3, 4, 5, 6, 2)

2 个答案:

答案 0 :(得分:5)

inds <- which(c(TRUE, diff(test_vector) != 1L) & #find start of week
              c(TRUE, diff(test_vector[-1]) == 1L, FALSE) #protect against one-day weeks
              ) + 1L
test_vector[inds]
#[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 3 3 4 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 4

答案 1 :(得分:0)

不确定你的旗帜是什么,但这会让你知道该值存在的位置。

for(i in 1:length(unique(test_vector))){
print(paste0(unique(test_vector)[i], " at position ", which(test_vector == unique(test_vector)[i])[2]))
}

要查看下一组,您可以将[2]更改为4或6或8,或者您拥有多少套。