如何将R数据框aoi列中重复字母替换为对应连续数字?
R语言实现aoi列字母到连续数字的映射
给定如下输入数据:
df <- data.frame( Partcpt = c("B","A","B","C"), aoi = c("ACA","CB","AA","AABC") )
需要将aoi列的每个字母替换为连续数字,重复字母沿用首次映射的数字,以下是两种可行方案:
方案一:正则表达式方案(依赖gsubfn包)
利用gsubfn包的gsubfn函数,结合正则匹配单个字母,通过自定义逻辑维护字母-数字映射:
library(gsubfn) df$aoi <- sapply(df$aoi, function(x) { char_map <- new.env() num_counter <- 1 # 正则匹配每个大写字母,替换为对应数字 gsubfn("[A-Z]", function(char) { if (!exists(char, envir = char_map)) { char_map[[char]] <<- num_counter num_counter <<- num_counter + 1 } as.character(char_map[[char]]) }, x) })
方案二:Base R原生实现(无需额外包)
通过拆分字符串、匹配唯一字符位置的方式实现,逻辑更直观:
df$aoi <- sapply(df$aoi, function(x) { # 拆分字符串为单个字符向量 char_vec <- strsplit(x, "")[[1]] # 匹配每个字符在唯一字符序列中的位置,得到对应数字 num_vec <- match(char_vec, unique(char_vec)) # 拼接数字为字符串 paste(num_vec, collapse = "") })
结果验证
运行任意方案后,查看数据框:
print(df)
输出符合预期:
Partcpt aoi 1 B 121 2 A 12 3 B 11 4 C 1123
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

