【发布时间】:2020-09-18 14:42:17
【问题描述】:
如何在 R 中表示(绘图和数字)锯齿波信号来自:
y <- c(NA,NA,NA,NA,1,NA,NA,NA,1,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,1,NA)
其中 1 表示y 中锯齿达到峰值的时间点(显然是 1)。注意峰之间的距离是不等的。
我考虑过使用插值,但也许没有必要。
谢谢,
【问题讨论】:
标签: r vector signals interpolation
如何在 R 中表示(绘图和数字)锯齿波信号来自:
y <- c(NA,NA,NA,NA,1,NA,NA,NA,1,NA,NA,NA,NA,NA,1,NA,NA,NA,NA,1,NA)
其中 1 表示y 中锯齿达到峰值的时间点(显然是 1)。注意峰之间的距离是不等的。
我考虑过使用插值,但也许没有必要。
谢谢,
【问题讨论】:
标签: r vector signals interpolation
你可以像这样创建一系列下降的数字:
peaks <- c(0, which(!is.na(y)), length(y))
drop <- -1/max(diff(peaks))
df <- do.call(rbind, lapply(diff(peaks), function(x) {
data.frame(x = c(0, rep(1, x)),
y = c(1, seq(1 + drop, by = drop, length.out = x)))
}))
df$x <- cumsum(df$x)
这给出了这个结果:
plot(df$x, df$y, type = "l")
或者如果你想变得花哨……
library(ggplot2)
ggplot(df, aes(x, y)) +
geom_line(col = "deepskyblue4", size = 1.5) +
theme_bw()
由reprex package (v0.3.0) 于 2020 年 9 月 18 日创建
【讨论】:
seq 更改为 seq(1 - 1/x, 0, length.out = x)
lapply 与函数结合起来。谢谢你,出色的工作!