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

如何用R基于Checked/Unchecked重塑数据集并自动处理列名?

用R实现数据集格式转换:从宽格式到长格式并提取处理类型

当然可以用R完全自动化实现这个转换!不用手动移除列名里的Treatment=前缀,不管是用tidyverse工具链还是reshape包都能轻松搞定,我给你一步步演示:

第一步:构造示例数据集

先把你给出的文本结构转换成R能识别的数据框:

library(tidyverse)

# 模拟你的原始数据集
df <- tibble(
  ID = c("Patient1", "Patient2", "Patient3"),
  `Treatment=Induction Chemo` = c("Checked", "Unchecked", "Unchecked"),
  `Treatment=Hypomethylating Chemo` = c("Unchecked", "Checked", "Unchecked"),
  `Treatment=Consolidation Chemo` = c("Unchecked", "Unchecked", "Checked")
)

第二步:用tidyverse实现转换(推荐,语法更直观)

用tidyr::pivot_longer把宽格式转成长格式,再过滤出Checked的记录,最后自动去掉Treatment=前缀:

result <- df %>%
  # 将所有Treatment开头的列转成两列:Treatment(原列名)、Status(Checked/Unchecked)
  pivot_longer(
    cols = starts_with("Treatment="),
    names_to = "Treatment",
    values_to = "Status"
  ) %>%
  # 只保留每个患者被选中的处理记录
  filter(Status == "Checked") %>%
  # 用正则表达式自动移除开头的Treatment=前缀
  mutate(Treatment = str_remove(Treatment, "^Treatment=")) %>%
  # 保留需要的两列
  select(ID, Treatment)

# 查看结果
print(result)

运行后你会得到完全符合要求的输出:

# A tibble: 3 × 2
  ID        Treatment               
  <chr>     <chr>                   
1 Patient1  Induction Chemo         
2 Patient2  Hypomethylating Chemo   
3 Patient3  Consolidation Chemo

如果你想用reshape包实现

虽然reshape包的语法稍显老旧,但也能完成这个需求:

library(reshape2)

# 转成长格式
melted_df <- melt(df, id.vars = "ID", variable.name = "Treatment", value.name = "Status")

# 过滤并处理列名
result_reshape <- melted_df %>%
  filter(Status == "Checked") %>%
  mutate(Treatment = gsub("^Treatment=", "", Treatment)) %>%
  select(ID, Treatment)

两种方法都不需要手动修改列名,全程自动化完成转换,你可以根据自己的习惯选择工具~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:57:56