全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5671 7
2018-03-05
如何求一段序列数字的波峰波谷个数
例如a<-c(2,3,6,5,7,9,2,3,6,5,7,2,3,6,5,7,9,10)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-3-5 17:22:46
a<-c(2,3,6,5,7,9,2,3,6,5,7,2,3,6,5,7,9,10)
peak <- function(x) {
    n <- length(x)
    if(n < 3) {
        return(0)
    }
    count <- 0
    for(i in 2:(n - 1)) {
        if(x[i] > x[i - 1] && x[i] > x[i + 1]) {
            count <- count + 1
        }
    }
    return(count)
}
peak(a)
peak(-a) ##波谷
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-3-5 18:07:38
复制代码

复制代码


像这种
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-3-6 10:15:55
菊花冰糖水 发表于 2018-3-5 18:07
像这种
Temp<-mydata$齿轮箱油池温度_平均值
findpeak_valley1 <- function(x){
  r <- rle(x)
  pks_position <-which(rep(x = diff(sign(diff(c(-Inf, r$values, -Inf)))) == -2, times = r$lengths))
  valley_position <-which(rep(x = diff(sign(diff(c(-Inf, r$values, -Inf)))) == 2, times = r$lengths))
  pks<-x[pks_position]
  valley<-x[valley_position]
  n_pks <- length(rle(pks)$value)
  n_valley <- length(rle(valley)$value)
  return(list(
    "pks_position"=pks_position,
    "valley_position"=valley_position,
    "pks"=pks,
    "valley"=valley,
    "n_pks"=n_pks,
    "n_valley"=n_valley
  ))
}
result<-findpeak_valley1(Temp)
paste('The pks number is %d',result$n_pks)
paste('The valley number is %d',result$n_valley)

你好,我中间稍微改动了点程序,将波峰波谷中重复的点去掉,然后计算一段油温数据的波峰波谷,最后得出的波峰和波谷的数量是不同,这是为什么呢?理论上讲,一段序列数据,其波峰和波谷的数量不应该是相同或者差1吗?可是我的差很多
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-3-6 11:18:10
yan_huili 发表于 2018-3-6 10:15
Temp
程序没什么大问题。没有数据我也不清楚哪里出的错。 找波峰波谷的逻辑感觉也没啥问题。你可能需要多花点功夫具体问题具体分析了。 有时候能用的代码并不一定在所有的数据上都适用。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-3-6 11:18:11
yan_huili 发表于 2018-3-6 10:15
Temp
程序没什么大问题。没有数据我也不清楚哪里出的错。 找波峰波谷的逻辑感觉也没啥问题。你可能需要多花点功夫具体问题具体分析了。 有时候能用的代码并不一定在所有的数据上都适用。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群