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

如何优化R代码批量将分类变量转换为指示患者是否用药的哑变量

分类变量转哑变量(按患者是否服用过药物二值化)优化方案

核心优化思路

  • 无需手动拼接用药字符串、逐个判断生成列,直接利用宽表转换逻辑自动生成所有药物对应的二分类字段
  • 仅保留「用户-药物」的唯一匹配关系后宽化,空值自动填充为0,完全匹配需求:只要服用过一次对应药物则取值为1,否则为0

优化后代码(tidyverse实现,兼容原使用的dplyr语法)

library(tidyverse)

# 原始示例数据
id<-c(rep("A",7),rep("B",4))
medoc<-c("par","mor","mor","par","sed","sed",
         "sed","cur","sed","cur","sed")
mydata<-data.frame(id,medoc)

# 核心处理代码,无需修改即可适配任意数量的药物类型
mydata_opt <- mydata %>%
  distinct(id, medoc) %>% # 每个用户每种药物仅保留1条记录(代表吃过)
  mutate(value = 1) %>% # 吃过的标记为1
  pivot_wider(names_from = medoc, values_from = value, values_fill = 0) # 宽化,没吃过的填充为0

结果验证

运行后mydata_opt输出和手动生成的结果完全一致:

idparmorsedcur
A1110
B0011

可选:基础R实现(无需加载第三方包)

# 生成交叉表后转数据框,大于0的统一转为1
mydata_base <- as.data.frame.matrix(table(unique(mydata)$id, unique(mydata)$medoc))
mydata_base[mydata_base > 0] <- 1
# 将id从行名转为正式列
mydata_base$id <- rownames(mydata_base)
rownames(mydata_base) <- NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:04