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

如何在R语言中将列名中的单位拆分至单独列

在R中拆分列名中的单位到单独列

首先先构造和你示例结构一致的测试数据:

# 构造示例数据框
df <- data.frame(
  SUBJID = c(2001, 2002),
  `Dose (mg)` = c(200, 200),
  `Tmax (h)` = c(5, 5)
)

方法一:使用tidyverse工具链(推荐)

借助dplyr和tidyr的组合,可以高效完成列名拆分与格式转换:

library(tidyverse)

df_processed <- df %>%
  # 将非SUBJID的列转为长格式,统一处理指标和单位
  pivot_longer(cols = -SUBJID, names_to = "metric", values_to = "value") %>%
  # 正则提取指标名和单位
  extract(metric, into = c("metric_name", "unit"), regex = "(.*) \\((.*)\\)") %>%
  # 转回宽格式,分别生成数值列和单位列
  pivot_wider(
    id_cols = SUBJID,
    names_from = metric_name,
    values_from = c(value, unit),
    names_sep = "_"
  ) %>%
  # 调整列顺序匹配目标格式
  select(SUBJID, Dose, Dose_unit, Tmax, Tmax_unit)

# 查看处理后的数据
print(df_processed)

核心逻辑是:先把宽表转成便于批量处理的长表,提取指标名和单位后再转回宽表,最后调整列顺序。

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

如果不想加载第三方包,用基础R的字符串处理函数也能完成:

# 获取所有列名
col_names <- colnames(df)
# 筛选出带单位(含括号)的列
unit_cols <- grep("\\(.*\\)", col_names, value = TRUE)

# 逐个处理带单位的列
for(col in unit_cols) {
  # 提取指标名:去掉括号及内部内容
  metric_name <- gsub(" \\(.*\\)", "", col)
  # 提取单位:取出括号内的内容
  unit <- gsub(".*\\((.*)\\)", "\\1", col)
  
  # 重命名原列
  colnames(df)[colnames(df) == col] <- metric_name
  # 添加对应单位列,所有行填充相同单位
  df[[paste0(metric_name, "_unit")]] <- unit
}

# 调整列顺序
df <- df[, c("SUBJID", "Dose", "Dose_unit", "Tmax", "Tmax_unit")]

# 查看处理后的数据
print(df)

这种方法通过循环遍历目标列,用正则拆分列名后直接修改原数据框,无需依赖第三方工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:12:35