为由两个不同列标识的每个公共行更新第三列-R

时间:2018-08-19 11:03:35

标签: r

我想基于由两个不同列(Participation_typecustID)标识的公共行来更新列accntID(五个不同的值)。我也有超过130000条记录,其中包含custIDaccntID的大约7000种不同组合。我在考虑是否可以使用五个参与类型值之一的随机抽样来填充此变量。但不确定如何。

**对于custIDaccntID的组合也没有可见的模式(例如重复custIDaccntID的值组合)。因此,我相信矢量化将无法正常工作。

样本数据:

library(data.table)

df <- data.table(custID = rep(c("a", "b"), times = 2),
                 accntID = rep(c(4, 7), times = 2), 
                 Batch_ID = c(1, 1, 2, 2), 
                 Participation_type = character(4))

     custID accntID Batch_ID
      a        4      1
      b        7      1 
      c        8      1
      b        7      2
      a        4      2
      d        4      1 

最终数据:输出应如下所述。

   custID  accntID  Batch_ID Participation_type
    a       4        1                BEN
    b       7        1                 AC
    c       8        1                 RC
    b       7        2                 AC
    a       4        2                BEN
    d       4        1                BEN

非常感谢您的建议和帮助。

1 个答案:

答案 0 :(得分:0)

我们创建键/值数据集,然后与原始数据集结合以创建“ Participation_type”

基于“ custID”,“ accntID”和“ Participation_type”的可能值的唯一组合创建键/值数据集

library(data.table)
keyvalDat <- data.table(custID = c('a', 'b', 'c', 'd', 'e'),
                         accntID = c(4, 7, 8, 9, 10), 
                         Participation_type = c("BEN", "AC", "RC", "O", "A"))

然后加入原始数据集

df[keyvalDat, Participation_type := Participation_type, on = .(custID, accntID)]
df
#   custID accntID Batch_ID Participation_type
#1:      a       4        1                BEN
#2:      b       7        1                 AC
#3:      c       8        1                 RC
#4:      a       4        2                BEN
#5:      b       7        2                 AC

数据

df <- data.table(custID = c('a', 'b', 'c', 'a', 'b'),
     accntID = c(4, 7, 8, 4, 7), Batch_ID = rep(1:2, c(3, 2)))

v1 <- c("BEN", "AC", "RC")