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

如何在R语言中清理含混合高度单位的数据列并统一为厘米

处理混合单位的身高转换(厘米/英尺英寸转统一厘米数值)

针对你数据框中同时存在厘米和英尺英寸格式的身高数据,我们可以通过区分单位类型分别提取数值并转换的方式解决,以下是两种实现方法:

方法一:使用tidyverse工具链(dplyr + stringr)

先加载所需包,再通过字符串提取和条件计算完成转换:

library(dplyr)
library(stringr)

# 示例数据
df <- data.frame(v1 = c('100 cm', '6 foot 10', '200 cm', '5 foot 11'))

# 转换并生成厘米列
df <- df %>%
  mutate(
    # 提取每行所有数字,生成列表格式的临时列
    nums = str_extract_all(v1, "\\d+"),
    # 根据单位类型计算厘米数值
    height_cm = case_when(
      # 含"cm"的行直接取数字转数值
      str_detect(v1, "cm") ~ as.numeric(unlist(nums)),
      # 含"foot"的行,提取英尺和英寸分别转换后求和
      str_detect(v1, "foot") ~ as.numeric(sapply(nums, `[`, 1)) * 30.48 + as.numeric(sapply(nums, `[`, 2)) * 2.54
    )
  ) %>%
  select(-nums) # 移除临时列

# 查看结果
df

方法二:Base R实现(无需额外包)

如果不想加载第三方包,可以用基础函数完成:

# 示例数据
df <- data.frame(v1 = c('100 cm', '6 foot 10', '200 cm', '5 foot 11'))

# 提取所有数字:先清除非数字/空格字符,再按空格分割
nums_list <- strsplit(gsub("[^0-9 ]", "", df$v1), " +")
# 转换为数值矩阵
nums_matrix <- do.call(rbind, lapply(nums_list, as.numeric))

# 计算厘米列
df$height_cm <- ifelse(
  grepl("cm", df$v1),
  nums_matrix[, 1], # 厘米行直接取第一个数字
  nums_matrix[, 1] * 30.48 + nums_matrix[, 2] * 2.54 # 英尺英寸行转换求和
)

# 查看结果
df

两种方法最终都会生成height_cm列,包含统一的厘米数值:

v1 height_cm
1   100 cm     100.00
2 6 foot 10     208.28
3   200 cm     200.00
4 5 foot 11     180.34

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:10:37