R语言如何基于另一数据框同名字段水平创建factor变量
R语言批量同步子表与主表同名因子的水平值
实现思路
通过匹配两个数据框共有的因子列,批量为子表的对应列指定主表的因子水平,无需手动逐个定义变量。
完整可运行代码
# 构造示例数据 main_df <- data.frame(id=c(1, 2, 3, 4, 5), age=c(10, 20, 30, 40, 45), gender=c("F","F","M","M","F"), city=c("A","B","C","D","D")) addl_df <- data.frame(id=c(7,8), age=c( 40, 45), gender=c("F","F"), city=c("C","D")) # 1. 先将主表的所有字符型列转换为因子 main_df[sapply(main_df, is.character)] <- lapply(main_df[sapply(main_df, is.character)], as.factor) # 2. 提取两个表共有的、主表中为因子类型的列名 common_cols <- intersect(names(Filter(is.factor, main_df)), colnames(addl_df)) # 3. 批量转换子表的对应列,因子水平完全对齐主表 addl_df[common_cols] <- lapply(common_cols, function(col_name) { factor(addl_df[[col_name]], levels = levels(main_df[[col_name]])) })
结果验证
执行代码后查看子表的city列属性:
> levels(addl_df$city) [1] "A" "B" "C" "D" > as.numeric(addl_df$city) [1] 3 4
完全符合需求:水平和主表一致,因子对应的数值映射也和主表完全相同。
内容的提问来源于stack exchange,提问作者Ketty
相关产品推荐
相关产品推荐

