2015-03-24 2 views
1

Я пытаюсь понять, как R имеет дело с строковыми манипуляциями и сравнениями.Строка Манипуляции и сравнения

С этой целью я создал два кадра данных, один из которых является сырыми данными, а другой - моими ссылочными данными, к которым я хотел бы сравнить. Я пытаюсь понять различные способы сравнения строк и как сравнивать кадры данных в целом (это выглядит намного проще в SQL, где вы можете просто использовать ключевое слово).

В приведенном ниже примере первым элементом являются справочные данные, а второй - необработанные данные.

grepl ("1845","UN1845") 

Вернется TRUE

any ("1845"=="UN1845") 

Вернется FALSE (я предполагаю здесь, потому что слово должно полностью совпадать)

is.element ("1845","UN1845") 

Вернется FALSE (той же причине, как ЛЮБАЯ)

Если бы я хотел проверить весь d ata по отношению к каждому элементу в исходной таблице, как бы я это сделал?

От игры вокруг я мог бы сделать что-то вроде

grepl(Raw$Contents, Ref$desc) 

Если исходные данные в основном строки и данные реф это строки. Однако, когда я бегу что-то вроде этого, я получаю сообщение:

In grepl(Raw$Contents, MyCode$desc) 
    argument 'pattern' has length > 1 and only the first element will be used 

Я предполагаю, что это связано с тем, что размер таблицы для справочной таблицы отличается от таблицы я бегу сравнения против.

Образец данных:

rawdata = data.frame(A=c("UN1845","FROZEN FOOD DRY ICE","LTD QTY8000")) 
refdata = data.frame(A=c("1845","8000")) 
+0

Возможно, лучше показать некоторые примерные данные и ожидаемый результат. Возможно, 'grepl (паста (Raw $ Contents, collapse =" | "), Ref $ desc)' работает. – akrun

+0

akrun уже предоставил вам правильное решение. Если это не так, укажите свой желаемый результат. –

+0

Привет, Дэвид, это прекрасно ... Можете ли вы сказать мне, как принять ваш ответ? –

ответ

0

сообщение errror означает: ваш pattern аргумент имеет более чем один элемент, но grepl и его семьи принимают только один шаблон в то время. Вам нужно будет петли (или *apply) по каждому шаблону в вашей коллекции refdata.

EDIT: уточнить: grepl принимает только один шаблон, но если этот шаблон содержит полный набор поиска, например. через оператор OR, grepl будет функционировать по желанию. спасибо Дэвиду Аренбургу за его комментарии.

+0

Нет, не совсем ... (я тоже так подумал). –

+0

@DavidArenburg вы можете уточнить?страница справки довольно ясна «Если передан вектор символов длиной 2 или более, первый элемент используется с предупреждением». –

+0

Оформить заказ [комментарий @akruns] (http://stackoverflow.com/questions/29232296/r-string-manipulation-comparisons/29232993?noredirect=1#comment46670648_29232296) и [связанный обман] (http://stackoverflow.com/вопросы/6947587/согласования-а-строка-с-различными-возможности-с помощью-Grep). –

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