如何在R语言中从混合类型列提取数值并按规则重编码
从混合类型列提取数值的实现方案
示例数据集
先定义目标数据集:
df <- data.frame(id = c(1,2,3,4,5,6,7,8,9,10), score = c("1","0","1+AB","0,B","1,1","A","B","1,A","1","0,A+B,C"))
解决方案代码
使用stringr包提取数字,同时处理无数字、数字重复的情况:
library(stringr) # 提取数字、去重并生成编码值 df$recoded_score <- sapply(str_extract_all(df$score, "\\d"), function(x) { if(length(x) == 0) { "0" } else { unique(x)[1] } }) # 可选:转换为数值类型(按需使用) df$recoded_score <- as.numeric(df$recoded_score)
代码逻辑说明
str_extract_all(df$score, "\\d"):从每个score字符串中提取所有数字字符,返回一个列表,每个元素对应行的数字集合sapply遍历列表做针对性处理:- 若未提取到数字,返回"0"
- 若有数字,用
unique()去重后取第一个值(满足重复数字仅保留一个的需求)
- 最后可将结果转为数值类型,方便后续分析计算
运行结果
执行代码后得到的结果与期望输出一致:
> df id score recoded_score 1 1 1 1 2 2 0 0 3 3 1+AB 1 4 4 0,B 0 5 5 1,1 1 6 6 A 0 7 7 B 0 8 8 1,A 1 9 9 1 1 10 10 0,A+B,C 0
内容的提问来源于stack exchange,提问作者amisos55
相关产品推荐
相关产品推荐

