在查找中使用多个参考值 table
Utilizing several reference values in a lookup table
在 R 中使用 data.table,我有两个数据 table。一个是我的实际数据集,另一个是查找 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
查找table:
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
如您所见,查找中的每个值都有两个不同的引用 table。我想将 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 或快速转换为这种格式会更好。
也许你可以先融化你的查找 table 将所有引用放在一列中,相应的值放在它们旁边,然后合并 data.tables
newlookup=melt(lookup,id.vars="Value")
setnames(newlookup, c("Value", "oldRef", "Ref"))
merge(dt,newlookup,by="Ref")
在 R 中使用 data.table,我有两个数据 table。一个是我的实际数据集,另一个是查找 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
查找table:
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
如您所见,查找中的每个值都有两个不同的引用 table。我想将 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 或快速转换为这种格式会更好。
也许你可以先融化你的查找 table 将所有引用放在一列中,相应的值放在它们旁边,然后合并 data.tables
newlookup=melt(lookup,id.vars="Value")
setnames(newlookup, c("Value", "oldRef", "Ref"))
merge(dt,newlookup,by="Ref")