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

多语言调查数据集合并:因子变量统一与转换的技术问询

多语言调查数据合并解决方案

示例数据

fr <- expand.grid( 
  ques = factor(rep(c("oui", "non"), each=2)), 
  gender = factor(rep(c("femme", "homme"), each=2)),
  chr = rep(c("c", "g"), times=1)
)
en <- expand.grid( 
  ques = factor(rep(c("yes", "no"), each=2)), 
  gender = factor(rep(c("man", "woman"), each=2)),
  chr = rep(c("c", "g"), times=1)
)
fr$chr <- as.character(fr$chr)
en$chr <- as.character(en$chr)

问题解决步骤

1. 高效提取所有因子变量的水平

不用逐个手动查看,写个函数批量提取数据框内所有因子变量的水平:

# 提取单个数据框的因子水平
get_factor_levels <- function(df) {
  lapply(df[, sapply(df, is.factor)], levels)
}

# 快速比对法、英数据的因子水平
get_factor_levels(fr)
get_factor_levels(en)

2. 统一因子水平顺序(保证跨语言编码一致)

调整因子水平顺序,让不同语言的同义选项对应相同数值编码:

# 调整法语gender水平顺序,匹配英语man/woman的对应关系
fr$gender <- factor(fr$gender, levels = c("homme", "femme"))
# 调整法语ques水平顺序,匹配英语yes/no的对应关系
fr$ques <- factor(fr$ques, levels = c("oui", "non"))

3. 因子转数值并合并数据

按原逻辑转换为数值型后合并,建议新增语言标识列方便后续溯源:

library(dplyr)

fr.1 <- fr %>% mutate(across(where(is.factor), as.numeric))
en.1 <- en %>% mutate(across(where(is.factor), as.numeric))

# 合并并添加语言标签
multi <- rbind.data.frame(
  cbind(fr.1, lang = "fr"),
  cbind(en.1, lang = "en")
)

4. 将合并后的数值转回英文因子水平

这一步完全可行,基于英语的因子水平做批量映射转换:

# 提取英语数据的因子水平作为映射规则
en_levels <- get_factor_levels(en)

# 批量将数值列转回英语因子
multi_final <- multi %>%
  mutate(across(
    all_of(names(en_levels)), # 仅针对原因子变量列
    ~ factor(.x, levels = seq_along(en_levels[[cur_column()]]), labels = en_levels[[cur_column()]])
  ))

# 查看最终结果结构
str(multi_final)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:21:29