在R语言中将含€、M/K的字符型列转换为整数并清理乱码
解决FIFA21薪资/身价数据的乱码清理与整数转换
核心思路
先清理乱码和货币符号,提取纯数字与单位(K/M),再根据单位换算成整数数值。
实现步骤与代码
1. 定义通用转换函数
这个函数可一次性完成乱码清理、单位识别和数值转换:
convert_currency <- function(x) { # 清理所有非数字、小数点、K/M的字符(含乱码、欧元符号) cleaned_str <- gsub("[^0-9.KM]", "", x) # 提取数值部分并转为数值型 numeric_val <- as.numeric(gsub("[KM]", "", cleaned_str)) # 根据单位确定换算系数 multiplier <- ifelse(grepl("M", cleaned_str), 1000000, 1000) # 换算后转为整数 as.integer(numeric_val * multiplier) }
2. 应用函数到目标列
将函数分别作用于Wage、Value、Release Clause三列,替换原有列或生成新的整数列:
# 处理薪资列 fifa21_raw_data$Wage <- convert_currency(fifa21_raw_data$Wage) # 处理身价列 fifa21_raw_data$Value <- convert_currency(fifa21_raw_data$Value) # 处理解约金列 fifa21_raw_data$`Release Clause` <- convert_currency(fifa21_raw_data$`Release Clause`)
步骤解释
- 乱码清理:用正则表达式
[^0-9.KM]匹配所有非目标字符(包括乱码、欧元符号),直接替换为空,确保仅保留数字、小数点和单位标识K/M。 - 数值提取:移除字符串中的K/M标识,将剩余内容转为数值型,例如
67.5M提取为67.5。 - 单位换算:通过
grepl判断字符串是否包含M,包含则乘以1000000(百万),否则乘以1000(千)。 - 整数转换:用
as.integer将最终结果转为整数类型,满足需求的整数格式。
内容的提问来源于stack exchange,提问作者ShadyEgg
相关产品推荐
相关产品推荐

