【发布时间】:2019-04-25 13:50:43
【问题描述】:
“平均值”是一个 1x756 的数值向量
这是我要写的序列(数值向量):
L <- c(rep(0, 251), Mean[252],
rep(0, 251), Mean[252*2],
rep(0, 251), Mean[252*3])
也就是说,在 252 的倍数处,我想保留原始值。其他索引应替换为零。
有没有更聪明的方法可以写出来?
【问题讨论】:
“平均值”是一个 1x756 的数值向量
这是我要写的序列(数值向量):
L <- c(rep(0, 251), Mean[252],
rep(0, 251), Mean[252*2],
rep(0, 251), Mean[252*3])
也就是说,在 252 的倍数处,我想保留原始值。其他索引应替换为零。
有没有更聪明的方法可以写出来?
【问题讨论】:
在R中,我们可以分成几组,然后进行拼接
i1 <- rep(1:3, each = 252)
i2 <- rep(1:3, each = 251)
unlist(Map(c, split(rep(0, 753), i2), split(Mean * i1, i1)), use.names = FALSE)
set.seed(24)
Mean <- rnorm(756)
【讨论】:
在沿向量的序列上使用%%(模),将(第一个)替换索引作为除数。替换除法结果为零的值*。
Mean[seq_along(Mean) %% 252 != 0] <- 0
更小的例子,也避免了第一个索引的硬编码:
set.seed(2)
x <- sample(12)
x[seq_along(x) %% (length(x) / 3) != 0] <- 0
x
# [1] 0 0 0 2 0 0 0 5 0 0 0 10
*感谢@snoram 提出更直接的替代方案。
【讨论】: