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

R语言:编写函数批量处理物质使用数据的变量重编码

高效处理物质使用数据集的重编码方案

核心思路

抛弃繁琐的if-else分支,用tidyverse的宽转长+长转宽流程批量处理,既能简洁实现需求,又能轻松扩展,同时完全保留原数据并生成目标变量。

步骤1:准备示例测试数据

先模拟符合结构的数据集,方便验证代码:

library(tidyverse)

set.seed(123)
sample_data <- tibble(
  id = 1:5,
  # sub1组变量
  sub1_value = sample(c("Alcohol", "Tobacco", "Cannabis"), 5, replace = TRUE),
  sub1_day1 = sample(0:5, 5, replace = TRUE),
  sub1_day2 = sample(0:5, 5, replace = TRUE),
  # sub2组变量
  sub2_value = sample(c("Alcohol", "Tobacco", "Cannabis"), 5, replace = TRUE),
  sub2_day1 = sample(0:5, 5, replace = TRUE),
  sub2_day2 = sample(0:5, 5, replace = TRUE),
  # sub3-sub6组变量(示例简化,实际可扩展至6组)
  sub3_value = sample(c("Alcohol", "Tobacco", "Cannabis"), 5, replace = TRUE),
  sub3_day1 = sample(0:5, 5, replace = TRUE),
  sub3_day2 = sample(0:5, 5, replace = TRUE)
)

步骤2:批量重编码函数实现

编写通用函数,自动识别subN开头的变量,完成格式转换:

recode_substance_data <- function(data, n_subs = 6, days = 7) {
  # 生成sub变量前缀列表
  sub_prefixes <- str_c("sub", 1:n_subs)
  
  # 第一次宽转长:拆分每个sub组的物质名称与每日使用量
  long_data <- data %>%
    pivot_longer(
      cols = starts_with("sub"),
      names_to = c("sub", ".value"),
      names_pattern = "(sub\\d+)_(.*)"
    )
  
  # 第二次宽转长+转宽:生成按物质命名的每日使用量变量
  wide_new_vars <- long_data %>%
    pivot_longer(
      cols = starts_with("day"),
      names_to = "day",
      values_to = "usage"
    ) %>%
    mutate(
      # 生成目标变量名:统一为dayX_物质小写格式
      new_var = str_c(day, "_", tolower(value))
    ) %>%
    pivot_wider(
      id_cols = id,
      names_from = new_var,
      values_from = usage,
      values_fill = 0  # 缺失使用量补0,可按需调整
    )
  
  # 合并原数据与新生成变量,保留所有原始内容
  final_data <- data %>%
    left_join(wide_new_vars, by = "id")
  
  return(final_data)
}

步骤3:函数调用与结果验证

直接传入数据集即可,默认处理6个sub变量和7天数据,可按需调整参数:

# 示例处理3个sub变量、2天数据
processed_data <- recode_substance_data(sample_data, n_subs = 3, days = 2)

# 查看结果:原数据列 + day1_alcohol、day1_tobacco等新列
glimpse(processed_data)

方案优势

  • 彻底消除重复代码,无需逐个sub写判断逻辑
  • 支持任意数量的sub变量(1-6或更多)和天数(7天或其他周期)
  • 自动统一物质名称为小写,避免大小写不一致导致的变量混乱
  • 完整保留原始数据,仅新增目标变量,不破坏原有结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:10:11