2013-05-06 2 views
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] 
+ } 

, но все, что делает это заменить номер с именем, например, что у меня есть два столбца имен и без номеров.

+0

Вы можете хранить его в качестве data.frame. Затем вы можете получить доступ к числу, соответствующему имени имени, следующим образом: 'DF $ Number [DF $ Name ==" ArcBo "]' например. – Arun

+1

Поскольку вы новичок здесь, вы можете прочитать [** о **] (http://stackoverflow.com/about) и [** faq **] (http://stackoverflow.com/faq) о том, как работает SO. StackOverflow сделан ** намного более ценным для всех, если, когда вы получаете ответ, который решает вашу проблему, вы принимаете его, нажимая маленькую галочку. Вы абсолютно не обязаны делать это, но это отличный способ «вернуть» сайту, если ответ действительно решит вашу проблему и поможет сохранить сайт в чистоте, удалив ответ на вопрос с неотвеченный вопрос. –

ответ

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

Или, как функция:

lookup <- function(lookupvalue) 
    lookuptab[lookuptab$Name==lookupvalue,2] 
lookup("ArcBo") 
lookup("GadMa") 
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 
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 
Смежные вопросы