【问题标题】:Utilizing several reference values in a lookup table在查找表中使用多个参考值
【发布时间】:2015-01-28 15:34:48
【问题描述】:

在 R 中使用 data.table,我有两个数据表。一个是我的实际数据集,另一个是查找表。

数据集:

dt <- data.table(Name = c("John", "Bob", "Sue", "Trish"), Ref = c("a", "A0", "BA", "c"))

**Name**    **Ref**  
John        a  
Bob         A0  
Sue         BA  
Trish       c

查找表:

lookup <- data.table(Ref1 = c("a", "b", "c"), Ref2 = c("A0", "AA", "BA"), Value = 1:3)

**Ref1** **Ref2** **Value**
a        A0       1
b        aa       2
c        BA       3

如您所见,查找表中的每个值都有两个不同的引用。我想将 Ref2 值转换为 Ref1,然后进行查找或直接进行所有查找。

到目前为止,我的方法是拆分 dt,因此每个拆分都包含每种格式的格式,然后查找值,最后是 rbind。

dt1 <- dt[dt[, nchar(Ref) == 2,],]
dt2 <- dt[dt[, nchar(Ref) == 1,],]

setnames(lookup, c("Ref1", "Ref", "Value"))
setkey(lookup, Ref)

dt1Merged <- merge(dt1, lookup, by = "Ref")[,c(1:2, 4), with = F]

setnames(lookup, c("Ref", "Ref2", "Value"))
setkey(lookup, Ref)

dt2Merged <- merge(dt2, lookup, by = "Ref")[,c(1:2, 4), with = F]

result <- rbind(dt1Merged, dt2Merged)

这种方法需要大量代码,效率不高。有没有更有效的方法来做到这一点?由于这只是大量操作中的一小部分,因此最好使用 data.table 或快速转换为这种格式。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    也许你可以先融合你的查找表,将所有引用放在一列中,并在它们旁边有相应的值,然后合并 data.tables

    newlookup=melt(lookup,id.vars="Value")
    setnames(newlookup, c("Value", "oldRef", "Ref"))
    merge(dt,newlookup,by="Ref")
    

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2017-04-07
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      相关资源
      最近更新 更多