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

基于另一列未知数值自动生成因子列的R语言实现需求

自动将Region_ID映射为BNR序列因子列的解决方案

问题场景

现有R脚本通过case_when手动将Region_ID的固定值映射为BNR1/BNR2/BNR3,但Region_ID的数值是随机生成的,每次运行都需要手动修改映射规则,无法自动适配不同的Region_ID取值。

原核心映射代码片段:

mutate(BNR = case_when(
  Region_ID == 10 ~ "BNR1",
  Region_ID == 13 ~ "BNR2",
  Region_ID == 15 ~ "BNR3",
  TRUE ~ as.character(Region_ID)))

解决方案

可以通过将Region_ID转换为因子后提取整数编码,再拼接前缀的方式实现自动映射,无需手动指定每个Region_ID的对应关系。

方法1:按数据中首次出现顺序生成BNR序列

Dai3D_evening_allBNR <- list.files(
  path = 'Z:/fishproj/Cambodia Dai project/Analytic/Flux/River_Width/Dai3C',
  pattern = "^Dai3D_ABC_10mbin_20211209_fullwatercolumn_evening_BNR*.*csv", 
  full.names = TRUE
) %>%
  map_dfr(read_csv) %>%
  mutate(
    # 保留Region_ID在数据中首次出现的顺序生成序列
    BNR = paste0("BNR", as.integer(fct_inorder(factor(Region_ID))))
  )

方法2:按Region_ID数值大小顺序生成BNR序列

如果需要按Region_ID的数值排序来生成序列,去掉fct_inorder即可:

Dai3D_evening_allBNR <- list.files(
  path = 'Z:/fishproj/Cambodia Dai project/Analytic/Flux/River_Width/Dai3C',
  pattern = "^Dai3D_ABC_10mbin_20211209_fullwatercolumn_evening_BNR*.*csv", 
  full.names = TRUE
) %>%
  map_dfr(read_csv) %>%
  mutate(
    # 按Region_ID的数值从小到大生成序列
    BNR = paste0("BNR", as.integer(factor(Region_ID)))
  )

方法3:结合分组操作生成序列(适合复杂场景)

如果需要配合分组逻辑,可通过group_by+cur_group_id()实现:

Dai3D_evening_allBNR <- list.files(
  path = 'Z:/fishproj/Cambodia Dai project/Analytic/Flux/River_Width/Dai3C',
  pattern = "^Dai3D_ABC_10mbin_20211209_fullwatercolumn_evening_BNR*.*csv", 
  full.names = TRUE
) %>%
  map_dfr(read_csv) %>%
  group_by(Region_ID) %>%
  mutate(BNR = paste0("BNR", cur_group_id())) %>%
  ungroup()

效果验证

假设新的Region_ID取值为22、35、41,运行代码后会自动生成如下结果:

Region_ID  Sv_mean  BNR
1        22    -64.01115 BNR1
2        22    -64.96363 BNR1
3        35    -67.98841 BNR2
4        35    -66.88734 BNR2
5        41    -69.79789 BNR3
6        41    -69.94071 BNR3

内容的提问来源于stack exchange,提问作者Jackson A Swan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:39:25