【问题标题】:Mark second location in a repeating pattern以重复模式标记第二个位置
【发布时间】:2015-09-15 15:10:04
【问题描述】:

我有一个数字向量,其下方有一个重复模式(通常是 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)

【问题讨论】:

    标签: r


    【解决方案1】:
    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
    

    【讨论】:

    • 使用 base R 做得很好,并且对一周一周的保护也很好。谢谢。
    【解决方案2】:

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

    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 或您拥有的任何组。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      相关资源
      最近更新 更多