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

R语言批量合并问卷英西版本诊断变量的高效实现方案需求

解决方案

这里提供两种可直接运行的批量处理方案,第一种符合你提到的dplyr函数使用习惯,第二种为无需额外依赖的base R方案。

Tidyverse 实现方案

使用dplyr的across()(替代已软弃用的mutate_at)结合正则匹配变量对即可实现批量处理,完全适配你的合并规则:
首先加载依赖包:

library(tidyverse)

执行批量合并:

# 提取所有英文版本诊断的基础变量名(匹配prev_dx开头且无_span后缀的列)
dx_base_names <- str_subset(names(sample_data), "^prev_dx.*(?<!_span)$")

sample_data_merged <- sample_data %>%
  mutate(
    across(all_of(dx_base_names),
      ~ as.integer(
        # NA默认视为未确诊,任意一个语种变量取值为1则合并结果为1
        coalesce(.x == 1, FALSE) | coalesce(get(paste0(cur_column(), "_span")) == 1, FALSE)
      ),
      # 直接覆盖原英文变量名,如需保留原变量可修改为 .names = "{.col}_merged" 生成新列
      .names = "{.col}"
    )
  )

以你提供的样本数据验证:id=5的受访者英文版本抑郁症、广泛性焦虑诊断为0,西语版本为1,合并后两个变量取值均为1,完全符合预期。

Base R 实现方案

如果不想加载额外依赖包,也可以用基础循环实现:

# 提取基础变量名
dx_base_names <- grep("^prev_dx.*(?<!_span)$", names(sample_data), perl = TRUE, value = TRUE)

# 循环合并每个语种变量对
for (dx in dx_base_names) {
  span_col <- paste0(dx, "_span")
  sample_data[[dx]] <- as.integer(sample_data[[dx]] %in% 1 | sample_data[[span_col]] %in% 1)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:24:01