【发布时间】:2015-10-07 08:01:00
【问题描述】:
我需要一个以不同间隔重复序列中数字的向量。我基本上需要这个
c(rep(1:42, each=6), rep(43:64, each = 7),
rep(65:106, each=6), rep(107:128, each = 7),
....但我需要继续这样做,直到接近 200 万。 所以我想要一个看起来像
的向量[1] 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 ...
.....
[252] 43 43 43 43 43 43 43 44 44 44 44 44 44 44
....
[400] 64 64 64 64 64 64 65 65 65 65 65 65...
等等。不仅仅是在 6 和 7 重复之间交替,而是主要是 6 和更少的 7,直到整个向量大约有 170 万行。那么,我可以做一个循环吗?还是申请、复制?我需要向量中的第 400 个条目为 64,第 800 个条目为 128,依此类推,采用均匀间隔的整数。
更新
感谢大家提供的快速聪明的技巧。它奏效了,至少在我处理的最后期限内足够好。我意识到重复 6 xs 和 7 xs 是尝试解决这个问题的一种非常愚蠢的方法,但至少它很快。但是现在我有一些时间,我想在这里获得每个人对我真正的潜在问题的意见/想法。
我有两个要合并的数据集。它们都是传感器数据集,都以秒表时间作为主键。但是一个每 1/400 秒记录一次,另一个每 1/256 秒记录一次。我已经修剪了每个的顶部,以便它们在完全相同的时刻开始。但是..现在呢?我在一组中每秒有 400 条记录,在另一组中每秒有 256 条记录。有没有办法在不丢失数据的情况下合并这些?插值或只是重复 obs 是好的,必要的,我认为,但我宁愿不丢弃任何数据。 我阅读了this post here,这与使用 xts 和 zoo 解决与我的问题非常相似的问题有关。但是他们每个都有很好的时代日期/时间。我只有这可怕的几分之一秒!
sample data (A):
time dist a_lat
1 139.4300 22 0
2 139.4325 22 0
3 139.4350 22 0
4 139.4375 22 0
5 139.4400 22 0
6 139.4425 22 0
7 139.4450 22 0
8 139.4475 22 0
9 139.4500 22 0
10 139.4525 22 0
sample data (B):
timestamp hex_acc_x hex_acc_y hex_acc_z
1 367065215501 -0.5546875 -0.7539062 0.1406250
2 367065215505 -0.5468750 -0.7070312 0.2109375
3 367065215509 -0.4218750 -0.6835938 0.1796875
4 367065215513 -0.5937500 -0.7421875 0.1562500
5 367065215517 -0.6757812 -0.7773438 0.2031250
6 367065215521 -0.5937500 -0.8554688 0.2460938
7 367065215525 -0.6132812 -0.8476562 0.2109375
8 367065215529 -0.3945312 -0.8906250 0.2031250
9 367065215533 -0.3203125 -0.8906250 0.2226562
10 367065215537 -0.3867188 -0.9531250 0.2578125
(哦,是的,顺便说一句,B 数据集时间戳是纪元格式 * 256,因为生活很艰难。我没有为此转换它,因为数据集 A 没有类似的东西,只有 0.0025 间隔。还有 B 数据传感器保持开启数小时后,A 数据传感器关闭,因此无济于事)
【问题讨论】:
-
@akrun 是的,它略有不同
-
@VeerendraGadekar 我没有仔细看,但可能对该解决方案稍作修改就可以在这里
-
谢谢!是的,如果我能让它工作,我可以制作 2 个向量,然后组合和排序!但我无法让它适用于多个序列。
-
我猜一个选项是
n <- 4; indx <- rep(seq(n), rep(c(42,22), n/2));n1 <- 128; lst <- split(seq(n1), indx);lst[c(TRUE, FALSE)] <- lapply(lst[c(TRUE, FALSE)],function(x) rep(x, each=6));lst[c(FALSE, TRUE)] <- lapply(lst[c(FALSE, TRUE)],function(x) rep(x, each=7));unlist(lst) -
当您说“不仅仅是在 6 7 和重复之间交替”时,您如何确定给定数字块
each重复了多少次?总是 42 然后 22 然后 42 然后 22 ...?
标签: r time-series sequence sensors matching