【问题标题】:NA Sawthooth signalNA 锯齿波信号
【发布时间】: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


    【解决方案1】:

    你可以像这样创建一系列下降的数字:

    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 日创建

    【讨论】:

    • @fina 这就是它的绘制方式。如果向量表示对信号进行采样的相等时间步长,那么只有在完全相同的时间有一个 0 和一个 1 时,您才会得到一条直线。当然可以这样做,但我认为您对将矢量转换为锯齿信号感兴趣。这只是你想要的情节吗?如果是这样,哪个版本 - 第一个或第二个?
    • @fina 是的,有点繁琐。希望更新能满足您的需求。
    • @fina 确定 - 只需将 seq 更改为 seq(1 - 1/x, 0, length.out = x)
    • 谢谢@fina。在 SO 上的 R 线程上闲逛是一种很好的学习方式。我在这里学到了很多很棒的技巧。
    • 是的,是的。但我认为我应该将lapply 与函数结合起来。谢谢你,出色的工作!
    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2018-09-19
    相关资源
    最近更新 更多