2015-08-06 2 views
1

Я искал эквивалентную функцию R для функции vlookup в Excel, и я наткнулся на lookup в R, однако, когда я пытаюсь ее использовать, я продолжаю получать ошибки.Как использовать поиск в R?

У меня есть 2 кадра данных (myresday и Assorted). myresday содержит 2 столбца: один с кодами (название столбца - Res.Code), а другой с соответствующими днями недели (colname = ContDay). Каждый из кодов представляет человека, и каждый человек сопоставляется с днем ​​недели, когда они должны работать. Assorted содержит запись о том, когда каждый человек действительно приходил в течение года. Это dataframe, подобный myresday, однако он намного больше. Я хочу посмотреть, соответствуют ли коды в ассортименте правильные дни или если дни, соответствующие каждому коду, неверны.

Я пытался использовать lookup, но продолжал сталкиваться с несколькими ошибками. Вот мой код:

Assorted$Cont_Day <- lookup(Assorted$VISIT_PROV_ID, myresday[, 1:2]) 
'the codes in myresday are in column 1, the days in column 2 

R постоянно говорил, что функция не найдена. Я посмотрел еще в функцию и кто-то предложил использовать библиотеку qdapTools, поэтому я ставлю:

library('qdapTools') 

до моего кода, и он сказал, что не qdapTools пакет.
Кто-нибудь знает, как это сделать или знать лучший способ решить эту проблему?

+0

Я предположил бы, что эквивалентно 'vlookup' в R является просто «слить»? Взгляните [здесь] (http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right) –

ответ

3

Перед использованием библиотеки вам необходимо установить qdapTools. используя этот код работает:

install.packages("qdapTools") 
library('qdapTools') 
Assorted$Cont_Day <- lookup(Assorted$VISIT_PROV_ID, myresday[, 1:2]) 
1

Базовая библиотека функций merge, скорее всего, делать то, что вам нужно это делать, без привлечения каких-либо пакетов.

Давайте сделаем некоторые игрушечные данные

set.seed(100) 
myresday <- data.frame(
    Res.Code=1:30, 
    ContDay=sample(1:7, 30, replace=T)) 
Assorted <- data.frame(
    date=sample(seq(as.Date('2010-01-1'),as.Date('2011-01-01'), by='day'), 100, replace=T), 
    VISIT_PROV_ID=sample(1:30, 100, replace=T)) 
head(Assorted) 
     date VISIT_PROV_ID 
1 2010-06-28    8 
2 2010-12-06   26 
3 2010-05-08   23 
4 2010-12-16   15 
5 2010-09-12   18 
6 2010-11-22    1 

А потом сделать Слить

checkDay <- merge(Assorted, myresday, by.x='VISIT_PROV_ID', by.y='Res.Code') 
head(checkDay) 
    VISIT_PROV_ID  date ContDay 
1    1 2010-06-16  3 
2    1 2010-08-07  3 
3    1 2010-11-22  3 
4    1 2010-03-18  3 
5    2 2010-08-19  2 
6    2 2010-11-04  2 

Edit: Обновление имен столбцов

Смежные вопросы