You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为R语言DataFrame所有列查找Peaks和Valleys并替换对应位置为1?

批量处理DataFrame列标记峰值与谷值

当然可以批量处理所有列,下面提供两种常用实现方式:

基础R实现

首先确保你已经加载了quantmod包(findPeaks和findValleys函数来自这个包),然后定义一个处理单列的函数,再用apply遍历所有列:

# 加载依赖包
library(quantmod)

# 定义处理单列的函数:标记峰值和谷值为1,其余为0
mark_peaks_valleys <- function(col) {
  peaks <- findPeaks(col, thresh = 0)
  valleys <- findValleys(col, thresh = 0)
  result <- rep(0, length(col))
  # 合并峰值和谷值位置,统一替换为1
  result <- replace(result, c(peaks, valleys), 1)
  return(result)
}

# 批量处理所有列
df_processed <- as.data.frame(apply(df, 2, mark_peaks_valleys))

apply(df, 2, mark_peaks_valleys)会按列遍历原DataFrame,将每一列传入自定义函数处理,最后把返回的矩阵转换回DataFrame格式。

tidyverse(dplyr)实现

如果你习惯用tidyverse语法,可以用dplyr::across来批量处理所有列:

library(dplyr)
library(quantmod)

df_processed <- df %>%
  mutate(across(everything(), ~{
    peaks <- findPeaks(.x, thresh = 0)
    valleys <- findValleys(.x, thresh = 0)
    res <- rep(0, length(.x))
    replace(res, c(peaks, valleys), 1)
  }))

across(everything(), ...)会对DataFrame的所有列执行花括号内的逻辑,代码更贴合管道式编程风格。

内容的提问来源于stack exchange,提问作者nando_5g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:35:40