0

最初の列に名前があり、2 番目の列に連続していない番号がある 2 列のルックアップ テーブルがあります。

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]
+ }

ただし、番号を名前に置き換えるだけで、名前の列が 2 つあり、番号はありません。

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 ] )
}

検索値、xで検索data.frameする、検索dfする列、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 に答える