在R中基于数据框匹配值创建零件号与名称合并列(tidyverse实现)
解决方案:用tidyverse合并零件号与名称并生成新字段
步骤1:加载tidyverse包并构造示例数据
首先加载tidyverse工具包,同时构造你提供的两个数据框:
library(tidyverse) # 维修成本数据df1 df1 <- tibble( Part_Number = c("A123", "A321", "A231", "A231", "A123", "A321"), Repair_Cost = c(150, 230, 100, 120, 180, 120) ) # 零件号-名称对应表df2 df2 <- tibble( Part_Number = c("A321", "A231", "A123"), Part_Name = c("Wheel", "Strut", "Mount") )
步骤2:合并数据并生成目标字段
使用left_join匹配两个数据框的零件号,再用str_c拼接字段:
df1_combined <- df1 %>% # 按Part_Number合并df2的名称信息 left_join(df2, by = "Part_Number") %>% # 拼接零件号与名称 mutate(Part_Num_Name = str_c(Part_Number, " : ", Part_Name))
查看结果
运行后df1_combined会包含新增的Part_Num_Name字段,示例输出:
# A tibble: 6 × 4 Part_Number Repair_Cost Part_Name Part_Num_Name <chr> <dbl> <chr> <chr> 1 A123 150 Mount A123 : Mount 2 A321 230 Wheel A321 : Wheel 3 A231 100 Strut A231 : Strut 4 A231 120 Strut A231 : Strut 5 A123 180 Mount A123 : Mount 6 A321 120 Wheel A321 : Wheel
原代码问题说明
你之前的代码无法运行的原因:
- 列名不匹配:你使用的
Part_Num、PartNumber、part_name与实际数据框的字段名Part_Number、Part_Name不一致 - ifelse用法错误:
ifelse需要三个参数(条件、满足时的值、不满足时的值),你只写了两个;且直接引用df2$part_name会因为长度不匹配,无法对应到df1的每一行 - tidyverse规范:tidyverse推荐使用管道(
%>%)和join操作处理数据关联,比ifelse更可靠易读
内容的提问来源于stack exchange,提问作者Tom Nilan
相关产品推荐
相关产品推荐

