0

我有一个双列查找表,第一列中有名称,第二列中有非连续数字:

Name    Number
ArcBo     16
ArcGl     41
BorSa    534
EleGr    121
GadMa    249
GadMo    448

我的最终目标是能够将名称传递给我的脚本,并让脚本返回名称的关联编号。我设想做一些类似于在 Python 中构建字典的事情,可能使用哈希,但我对R还是相当陌生,环境似乎非常具有挑战性。还有另一种方法可以解决这个问题吗?我尝试了遍历表的最终简单解决方案,如下所示:

for (i in (1:nrow(lookupTable))){
+ lookupTable[i,2] <- lookupTable[i,1]
+ }

但所做的只是用名称替换数字,这样我就有两列名称而没有数字。

4

3 回答 3

2
lookuptab[lookuptab$Name==lookupvalue,2]

或者,作为一个函数:

lookup <- function(lookupvalue)
    lookuptab[lookuptab$Name==lookupvalue,2]
lookup("ArcBo")
lookup("GadMa")
于 2013-05-06T12:12:08.113 回答
1

如果您想要一个功能,这应该可以按您的意愿工作:

flookup <- function(x , df , lkup = 1 , ret = 2 ){
return( df[ df[,lkup] %in% x , ret ] )
}

您可以指定查找值 、xdata.framedf其中查找的 、查找lkup的列以及要从 中返回的列ret

flookup( "ArcBo" , df , 1 , 2 )
# [1] 16

如果您愿意,它为您提供了一次查找多个名称的灵活性:

flookup( c("ArcBo" , "EleGr") , df , 1 , 2 )
# [1]  16 121
于 2013-05-06T11:54:24.323 回答
0

qdap 库使用非常易于使用的环境(哈希)查找。

在这里,我解决了您的问题并组成了一个要查找的值向量:

lookupTable <- read.table(text="Name    Number
ArcBo     16
ArcGl     41
BorSa    534
EleGr    121
GadMa    249
GadMo    448", header=TRUE)

I_want_2_look_u_up <- sample(lookupTable$Name, 25, T)


## > I_want_2_loo_u_up
##  [1] ArcBo ArcBo EleGr ArcGl GadMa ArcBo ArcGl ArcGl ArcGl GadMo GadMa ArcGl
## [13] ArcBo GadMo ArcBo BorSa ArcGl ArcGl GadMo ArcGl GadMo ArcBo EleGr GadMo
## [25] GadMa
## Levels: ArcBo ArcGl BorSa EleGr GadMa GadMo

library(qdap)
lookup(I_want_2_look_u_up, lookupTable)

## > lookup(I_want_2_look_u_up, lookupTable)
##  [1]  16  16 121  41 249  16  41  41  41 448 249  41  16 448  16 534  41  41 448
## [20]  41 448  16 121 448 249
于 2013-05-06T17:52:25.680 回答