代码之家  ›  专栏  ›  技术社区  ›  user321627

在r的data.table中,如何在一个数据表中创建一个新列,该列的值与一个列元素和另一个表匹配并对应?[复制品]

  •  0
  • user321627  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我现在有两张桌子:

      A  B
    3.3 10
    2.5 11
    6.7 11
    6.0 12
    5.4 12
    3.5 12
    6.5 13
    8.0 13
    

      B Val
     10   0
     11   1
     12   2
     13   3
    

    我们要做的是在第一个表中创建一个新的列c,使它包含对应于第一个表中b的每个元素的值val,该元素与第二个表中的b匹配。我想得到:

      A  B C
    3.3 10 0
    2.5 11 1
    6.7 11 1
    6.0 12 2
    5.4 12 2
    3.5 12 2
    6.5 13 3
    8.0 13 3
    

    示例代码为:

    DT.1 <- data.table(A=c(3.3,2.5,6.7,6.0,5.4,3.5,6.5,8.0), B=c(10,11,11,12,12,12,13,13))
    DT.2 <- data.table(B=c(10,11,12,13),Val=c(0,1,2,3))
    

    感谢您的任何提示或输入。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Wimpel    6 年前

    连接部分肯定是重复的。我包含了这个答案,因为一些重命名/重新排序也正在进行中。

    dt1 <- fread("A  B
    3.3 10
    2.5 11
    6.7 11
    6.0 12
    5.4 12
    3.5 12
    6.5 13
    8.0 13", header = TRUE)
    
    dt2 <- fread("B Val
    10   0
    11   1
    12   2
    13   3", header = TRUE)
    
    result <- dt2[dt1, on = .(B)]
    setcolorder(result, c("A", "B", "Val") )
    setnames(result, old = "Val", new = "C")
    
    #      A  B C
    # 1: 3.3 10 0
    # 2: 2.5 11 1
    # 3: 6.7 11 1
    # 4: 6.0 12 2
    # 5: 5.4 12 2
    # 6: 3.5 12 2
    # 7: 6.5 13 3
    # 8: 8.0 13 3