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

多变量字符串数字提取问询:批量处理pre/post前缀变量方案

批量提取调查数据中pre/post开头变量的数字前缀

需求说明

  • 调查数据响应以数字开头(如"1-Agree"、"1-Acceurdo"),需提取仅保留数字部分
  • 目标变量均以pre或post开头,需批量处理
  • 部分变量为多选格式(如"1-Doctor, 2-Nurse, 6-Hospital"),需先拆分选项再提取数字

解决方案(R语言)

1. 定义数字提取函数

先写一个通用函数,兼容单选/多选格式,提取所有数字并保留逗号分隔的结构:

library(tidyverse)

extract_numeric_prefix <- function(x) {
  if (is.na(x)) return(NA)
  # 拆分多选选项(匹配逗号+任意空格)
  options <- str_split(x, ",\\s+", simplify = TRUE)
  # 提取每个选项开头的连续数字
  numeric_vals <- str_extract(options, "^\\d+")
  # 用逗号拼接结果,和原格式对齐
  paste(numeric_vals, collapse = ", ")
}

2. 批量处理目标变量

筛选所有以pre/post开头的变量,批量应用提取函数:

# 匹配目标变量名(忽略大小写)
target_vars <- grep("^(pre|post)", names(df), ignore.case = TRUE, value = TRUE)

# 批量更新变量
df <- df %>%
  mutate(across(all_of(target_vars), extract_numeric_prefix))

3. 可选:将多选拆分为多列

如果需要把多选结果拆分成独立列(如原示例中的Pre3[,1]、Pre3[,2]),可以按以下步骤处理:

# 先统计所有目标变量的最大选项数
max_option_count <- df %>%
  select(all_of(target_vars)) %>%
  mutate(across(everything(), ~str_count(., ",") + 1)) %>%
  max(na.rm = TRUE)

# 定义拆分提取函数
split_extract <- function(x) {
  if (is.na(x)) return(rep(NA, max_option_count))
  options <- str_split(x, ",\\s+", simplify = TRUE)
  numeric_vals <- str_extract(options, "^\\d+")
  # 补齐NA到最大长度
  length(numeric_vals) <- max_option_count
  numeric_vals
}

# 批量拆分并生成新列
split_columns <- df %>%
  select(all_of(target_vars)) %>%
  mutate(across(everything(), split_extract)) %>%
  unnest_wider(everything(), names_sep = "_")

# 合并回原数据框
df <- bind_cols(df, split_columns)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:18:13