R语言中case_when赋值不同向量元素至同一列遇循环错误求助
解决多DataFrame合并type列的问题
你遇到的错误是因为case_when()中,逻辑判断的结果是长度为5的向量(对应主df的5行),但右侧的df2$type2是长度为2的向量,R无法将短向量循环匹配到长向量的每个位置,导致维度不匹配报错。
以下是几种可行的解决方案:
方法1:使用left_join + coalesce(推荐)
先通过left_join按name依次合并所有含type的DataFrame,再用coalesce把多个type列合并为一列,自动取非空值:
library(dplyr) # 初始数据 df <- data.frame("name" = c("A", "B", "C", "D", "E")) df2 <- data.frame("name" = c("A", "C"), "type2" = c("type1x", "type2x")) df3 <- data.frame("name" = c("D", "E"), "type3" = c("type10x", "type20x")) # 合并并整理列 result_df <- df %>% left_join(df2, by = "name") %>% left_join(df3, by = "name") %>% mutate(type = coalesce(type2, type3)) %>% select(-type2, -type3) print(result_df)
输出结果:
name type 1 A type1x 2 B <NA> 3 C type2x 4 D type10x 5 E type20x
方法2:在case_when中用match匹配对应值
如果一定要用case_when,需要用match函数根据name找到对应的type值,确保左右向量长度一致:
result_df <- df %>% mutate(type = case_when( name %in% df2$name ~ df2$type2[match(name, df2$name)], name %in% df3$name ~ df3$type3[match(name, df3$name)], TRUE ~ NA_character_ )) print(result_df)
方法3:先合并所有type表再关联
先把df2和df3的type列统一名称,合并成一个完整的type映射表,再和主表关联:
# 统一列名并合并type表 type_df <- bind_rows( df2 %>% rename(type = type2), df3 %>% rename(type = type3) ) # 关联主表 result_df <- df %>% left_join(type_df, by = "name") print(result_df)
内容的提问来源于stack exchange,提问作者eraysahin
相关产品推荐
相关产品推荐

