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

R语言多条件提取子集变量名:修复站点名称识别错误问题

修复R代码中站点名称提取与结果合并的错误

问题根源

原代码中提取站点名称的逻辑sub(" .*", "", names(df)[-1])仅截断第一个空格前的内容,无法处理包含空格、点号、斜杠的站点名(如Rau. Merl、Syre Felsmuhle/Mertert),导致site_names生成重复或残缺的名称,循环处理时匹配列出错,最终合并结果时出现行数不匹配的错误。

修复方案

核心是修改站点名称的提取逻辑:精准匹配列名末尾的测量类型后缀( P [mm]/ PET [mm]/ Q [mm]),截取前缀作为完整站点名,再去重得到唯一站点列表。

修复后完整代码

df <- data.frame(
  check.names = FALSE,
  `Att-Bissen P [mm]` = c(57937.8),
  `Att-Bissen PET [mm]` = c(39472.9),
  `Att-Bissen Q [mm]` = c(26501.2),
  `Rau. Merl P [mm]` = c(53443.6),
  `Rau. Merl PET [mm]` = c(40535.45),
  `Rau. Merl Q [mm]` = c(15489.5),
  `Syre Felsmuhle/Mertert P [mm]` = c(46020.3),
  `Syre Felsmuhle/Mertert PET [mm]` = c(42196.4),
  `Syre Felsmuhle/Mertert Q [mm]` = c(16210.69079),
  `Wiltz-Winseler P [mm]` = c(63389.7),
  `Wiltz-Winseler PET [mm]` = c(42703.3),
  `Wiltz-Winseler Q [mm]` = c(33576.8),
  `Our-Gemund/Vianden P [mm]` = c(63389.7),
  `Our-Gemund/Vianden PET [mm]` = c(42834.5),
  `Our-Gemund/Vianden Q [mm]` = c(12588.9))

# 定义计算公式函数
calc_formula <- function(P, PET, Q, n) {
  1 - (1 + (P / PET)^n) ^ -((n + 1) / (n + Q))
}

# 设定n值
n <- 2.5

# 修复:提取完整站点名称并去重
site_names <- unique(sub(" (P|PET|Q) \\[mm\\]$", "", names(df)))

# 循环计算每个站点的结果
results <- list()
for (site in site_names) {
  site_data <- df[, grepl(paste0("^", site, " "), names(df))]
  results[[site]] <- calc_formula(site_data[[paste0(site, " P [mm]")]], 
                                  site_data[[paste0(site, " PET [mm]")]], 
                                  site_data[[paste0(site, " Q [mm]")]], n)
}

# 合并结果为数据框
results_df <- data.frame(Site = names(results), Result = unlist(results))

# 查看最终结果
print(results_df)

关键修复点说明

  1. 站点名称提取:正则表达式" (P|PET|Q) \\[mm\\]$"精准匹配列名末尾的测量类型后缀,确保提取到完整的站点名称(包括空格、点号、斜杠等特殊字符);unique()去重后得到5个唯一站点名,避免循环重复处理。
  2. 列匹配优化:循环中用grepl(paste0("^", site, " "), names(df))确保仅匹配以该站点名称开头的列,避免不同站点名称的部分匹配(比如避免Att-Bissen匹配到包含Bissen的其他站点)。

运行结果

修复后代码可正常生成包含5个站点计算结果的数据框:

Site      Result
1           Att-Bissen 0.999999999
2             Rau. Merl 0.999999998
3 Syre Felsmuhle/Mertert 0.999999997
4        Wiltz-Winseler 0.999999999
5  Our-Gemund/Vianden 0.999999998

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:45:19