识别 R 中数值向量中相似的重复递增模式
Identify similar repeating ascending patterns in numeric vectors in R
我有多个具有类似重复升序模式的数值向量。例如:
vec_1 <- c(43, 17, 186, 193, 186, 186, 474, 491, 498, 498, 673, 736, 743, 716,
44, 19, 193, 194, 193, 193, 472, 498, 476, 499, 673, 743, 714, 714,
19, 21, 194, 180, 194, 194, 485, 499, 481, 476, 712, 719, 712,
17, 40, 174, 180, 169, 495, 485, 673, 177, 485, 481, 714, 730, 733,
40, 33, 190, 174, 180, 482, 495, 495, 479, 703, 733, 704)
总有5次重复。在上面的例子中:
- 以 43 开头,以 716 结尾
- 以 44 开始(其中 1. 结束),以 714 结束
- 等等
我想生成一个标识重复次数的新向量。对于 vec_1,这将是:
rep_nums_1 <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, ..., 5)
每次重复中的项目数可能不同(因此我不能只将前 14 个元素分配为 1,接下来的 14 个元素分配为 2,等等)
不确定如何最好地解决这个问题。一个不优雅的解决方案是检查序列中的下一个元素是否比当前元素小超过例如300 并更改组号(如果是)。有更好的建议吗?谢谢。
您可以进一步详细说明您的 "pattern",但我认为这可以解决问题:
rep(1:5, diff(c(0, which(diff(vec_1) < -500), length(vec_1))))
rle
也应该有一个方法。
另一种变体是
cumsum(c(TRUE,diff(vec_1) < -500))
我有多个具有类似重复升序模式的数值向量。例如:
vec_1 <- c(43, 17, 186, 193, 186, 186, 474, 491, 498, 498, 673, 736, 743, 716,
44, 19, 193, 194, 193, 193, 472, 498, 476, 499, 673, 743, 714, 714,
19, 21, 194, 180, 194, 194, 485, 499, 481, 476, 712, 719, 712,
17, 40, 174, 180, 169, 495, 485, 673, 177, 485, 481, 714, 730, 733,
40, 33, 190, 174, 180, 482, 495, 495, 479, 703, 733, 704)
总有5次重复。在上面的例子中:
- 以 43 开头,以 716 结尾
- 以 44 开始(其中 1. 结束),以 714 结束
- 等等
我想生成一个标识重复次数的新向量。对于 vec_1,这将是:
rep_nums_1 <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, ..., 5)
每次重复中的项目数可能不同(因此我不能只将前 14 个元素分配为 1,接下来的 14 个元素分配为 2,等等)
不确定如何最好地解决这个问题。一个不优雅的解决方案是检查序列中的下一个元素是否比当前元素小超过例如300 并更改组号(如果是)。有更好的建议吗?谢谢。
您可以进一步详细说明您的 "pattern",但我认为这可以解决问题:
rep(1:5, diff(c(0, which(diff(vec_1) < -500), length(vec_1))))
rle
也应该有一个方法。
另一种变体是
cumsum(c(TRUE,diff(vec_1) < -500))