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

如何将dat2的codes值替换为dat1中匹配code1/code2的code3值?

解决方案

可以通过将宽格式的dat1转为长格式,再利用data.table的连接匹配功能实现需求,具体步骤如下:

完整代码实现

library(data.table)

# 加载示例数据
dat1 <- fread("code1 code2 code3
              A3     B2   C1
              A4     B3   C2")

dat2 <- fread("codes
              A3  
              A4
              B2
              B3")

# 1. 将dat1转换为长格式:把code1、code2合并为一列,对应各自的code3
dat1_long <- melt(dat1, 
                  id.vars = "code3", 
                  measure.vars = c("code1", "code2"), 
                  value.name = "codes")[, .(codes, code3)]

# 2. 左连接匹配,替换dat2的codes值
dat2[dat1_long, on = "codes", codes := i.code3]

# 最终结果就是dat2,也可以赋值给dat_out
dat_out <- dat2

步骤解释

  1. 转长格式:
    使用melt()函数把dat1的code1和code2列合并为名为codes的单列,同时保留对应的code3值。处理后dat1_long的结构为:
    codes code3
    1:    A3    C1
    2:    A4    C2
    3:    B2    C1
    4:    B3    C2
    
  2. 连接替换:
    利用data.table的X[Y, on = key, col := i.col]语法,在dat2中匹配dat1_long的codes列,直接将dat2$codes替换为对应的dat1_long$code3值。这种方式高效且符合data.table的操作习惯。

运行后dat_out的结果完全符合你的期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:05:23