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

在R中使用通配符按晶圆分组计算行级聚合统计量

解决方案:按行计算不同Wafer的统计量

针对你需要按行对Wafer(1)、Wafer(2)对应的列分别计算min、max、mean等统计量的需求,这里提供三种实用的实现方法:

方法一:dplyr(tidyverse风格,易读性强)

利用rowwise()开启按行处理模式,结合c_across()选中目标列,直接调用统计函数计算:

library(dplyr)

# 假设你的数据框名为df
df_processed <- df %>%
  rowwise() %>%
  mutate(
    Wafer1_Max = max(c_across(starts_with("Wafer(1)"))),
    Wafer1_Min = min(c_across(starts_with("Wafer(1)"))),
    Wafer1_Mean = mean(c_across(starts_with("Wafer(1)"))),
    Wafer2_Max = max(c_across(starts_with("Wafer(2)"))),
    Wafer2_Min = min(c_across(starts_with("Wafer(2)"))),
    Wafer2_Mean = mean(c_across(starts_with("Wafer(2)")))
  ) %>%
  ungroup()
  • rowwise():将数据框切换为按行处理模式
  • c_across(starts_with("Wafer(1)")):选中所有以Wafer(1)开头的列,组成向量供统计函数计算
  • ungroup():处理完成后取消行分组,恢复常规数据框结构

方法二:data.table(高效处理大数据)

如果数据量较大,data.table的按行操作性能更优:

library(data.table)

setDT(df)

df[, c("Wafer1_Max", "Wafer1_Min", "Wafer1_Mean",
       "Wafer2_Max", "Wafer2_Min", "Wafer2_Mean") := list(
         max(.SD[, grep("Wafer\\(1\\)", names(.SD)), with = FALSE]),
         min(.SD[, grep("Wafer\\(1\\)", names(.SD)), with = FALSE]),
         mean(.SD[, grep("Wafer\\(1\\)", names(.SD)), with = FALSE]),
         max(.SD[, grep("Wafer\\(2\\)", names(.SD)), with = FALSE]),
         min(.SD[, grep("Wafer\\(2\\)", names(.SD)), with = FALSE]),
         mean(.SD[, grep("Wafer\\(2\\)", names(.SD)), with = FALSE])
       ), by = 1:nrow(df)]
  • setDT(df):将普通数据框转为data.table格式
  • grep("Wafer\\(1\\)", names(.SD)):通过正则匹配选中Wafer(1)相关列(括号需转义)
  • by = 1:nrow(df):指定按每行分组处理
  • :=:直接在原数据框添加新列,避免额外内存开销

方法三:基础R实现(无需第三方包)

不想加载额外包的话,用基础R的apply系列函数也能完成:

# 提取Wafer1和Wafer2的列索引
wafer1_cols <- grep("Wafer\\(1\\)", names(df))
wafer2_cols <- grep("Wafer\\(2\\)", names(df))

# 计算统计量并添加为新列
df$Wafer1_Max <- apply(df[, wafer1_cols], 1, max)
df$Wafer1_Min <- apply(df[, wafer1_cols], 1, min)
df$Wafer1_Mean <- apply(df[, wafer1_cols], 1, mean)
df$Wafer2_Max <- apply(df[, wafer2_cols], 1, max)
df$Wafer2_Min <- apply(df[, wafer2_cols], 1, min)
df$Wafer2_Mean <- apply(df[, wafer2_cols], 1, mean)
  • grep:匹配列名得到目标列的索引
  • apply(..., 1, max):按行(参数1代表行)对选中列应用max函数,返回每行的最大值向量

以上三种方法都能生成你预期的结果,可根据数据规模和个人习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:40:22