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

R语言清理身高列:移除cm单位并转换英尺英寸为厘米

处理FIFA21数据集Height列的完整方案

针对你遇到的混合格式身高数据,这里提供两种可直接复用的R解决方案,帮你批量转换为统一的厘米数值:

方法1:基础R实现(无需额外包)

适合不想加载第三方包的场景,步骤清晰易理解:

  1. 初始化存储结果的数值向量
# 创建与数据集行数匹配的空数值向量
height_cm <- numeric(nrow(fifa21_v2))
  1. 处理厘米格式数据
# 筛选带"cm"的行,移除单位后转为数值
cm_rows <- grepl("cm", fifa21_v2$Height)
height_cm[cm_rows] <- as.numeric(gsub("cm", "", fifa21_v2$Height[cm_rows]))
  1. 处理英尺英寸格式数据
# 筛选带单引号的行,拆分英尺和英寸后转换为厘米
ft_in_rows <- grepl("'", fifa21_v2$Height)
ft_in_split <- strsplit(fifa21_v2$Height[ft_in_rows], "'")

# 遍历拆分结果,计算总厘米数(1英尺=30.48cm,1英寸=2.54cm)
height_cm[ft_in_rows] <- sapply(ft_in_split, function(x) {
  ft <- as.numeric(x[1])
  inch <- as.numeric(x[2])
  ft * 30.48 + inch * 2.54
})
  1. 将结果存入数据集
# 添加新的纯数值身高列
fifa21_v2$Height_cm <- height_cm
# 若需替换原列,执行:fifa21_v2$Height <- height_cm

方法2:tidyverse简化实现(更简洁)

借助dplyr和stringr包,用管道语法让逻辑更直观:

library(dplyr)
library(stringr)

fifa21_v2 <- fifa21_v2 %>%
  mutate(
    Height_cm = case_when(
      # 处理厘米格式:移除cm后转数值
      str_detect(Height, "cm") ~ as.numeric(str_remove(Height, "cm")),
      # 处理英尺英寸格式:提取数字并计算
      str_detect(Height, "'") ~ {
        ft <- as.numeric(str_extract(Height, "^\\d+"))  # 提取开头的英尺数
        inch <- as.numeric(str_extract(Height, "(?<=')\\d+"))  # 提取单引号后的英寸数
        ft * 30.48 + inch * 2.54
      },
      # 处理异常数据(如空值、格式错误),返回NA
      TRUE ~ NA_real_
    )
  )

关键说明

  • 转换公式采用国际标准:1英尺=30.48cm,1英寸=2.54cm
  • 两种方法都包含异常处理,遇到非预期格式会返回NA,避免报错
  • 转换后Height_cm为数值型列,可直接用于后续分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:52:44