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

如何在Excel或R中基于多变量生成唯一ID并避免重复?

在R Studio中生成唯一地块ID的解决方案

方案一:贴近手动格式的可读唯一ID

如果你想保留类似MT18MG3的可读格式,同时确保ID绝对不重复,可以按以下步骤实现:

  1. 加载数据处理工具包
library(tidyverse)
  1. 处理数据生成唯一ID
    假设你的数据框包含farmer_name(农户姓名)、plot_name(地块名称)、area_ha(种植面积)三列,运行以下代码:
# 示例数据,替换成你的实际数据
farmers <- tibble(
  farmer_name = c("Mattern, Tobias", "Smith, John", "Mattern, Tobias"),
  plot_name = c("Mittelgewanne 3", "North Field 2", "Mittelgewanne 3"),
  area_ha = c(1.8, 2.5, 1.8)
)

# 生成各部分缩写并拼接唯一ID
farmers_processed <- farmers %>%
  # 提取农户姓名首字母(姓氏+名字)
  mutate(farmer_abbr = str_extract_all(farmer_name, "\\b[A-Z]") %>% map_chr(str_c, collapse = ""),
         # 处理面积:去掉小数点,补前导零保证两位(如0.9→09,1.8→18)
         area_abbr = str_replace(area_ha, "\\.", "") %>% str_pad(width = 2, side = "left", pad = "0"),
         # 提取地块缩写:单词首字母+末尾数字(如Mittelgewanne 3→MG3)
         plot_abbr = str_c(str_extract_all(plot_name, "\\b[A-Z]") %>% map_chr(str_c, collapse = ""),
                           str_extract(plot_name, "\\d+$"))) %>%
  # 拼接基础ID
  mutate(base_id = str_c(farmer_abbr, area_abbr, plot_abbr)) %>%
  # 对重复的基础ID添加序号后缀,确保唯一
  group_by(base_id) %>%
  mutate(unique_id = ifelse(n() == 1, base_id, str_c(base_id, row_number()))) %>%
  ungroup()
  1. 验证唯一性
    运行以下代码确认没有重复ID:
any(duplicated(farmers_processed$unique_id))

返回FALSE则说明所有ID唯一。

方案二:绝对唯一的哈希ID

如果不需要可读格式,追求100%无重复,可使用哈希函数生成ID:

  1. 加载哈希工具包
library(digest)
library(tidyverse)
  1. 生成哈希ID
farmers %>%
  mutate(unique_id = str_c(farmer_name, plot_name, area_ha, sep = "|") %>% digest(algo = "md5"))

这种方法通过将三个字段拼接后生成MD5哈希值,只要字段组合唯一,哈希ID就绝对唯一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:05:05