Как объединить 2 набора данных, используя строковую переменную, а не индекс или идентификатор в Stata или R? [Дубликат]

Ошибка произошла здесь из-за использования одинарных кавычек ('). Вы можете поместить свой запрос следующим образом:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string ($username)."'
");

Он использует mysql_real_escape_string для предотвращения SQL-инъекции. Хотя мы должны использовать расширение MySQLi или PDO_MYSQL для обновленной версии PHP (PHP 5.5.0 и более поздних версий), но для более старых версий mysql_real_escape_string это будет трюк.

12
задан pnuts 16 November 2015 в 23:24
поделиться

4 ответа

Приблизительное сопоставление строк не является хорошей идеей, так как неправильное совпадение приведет к аннулированию всего анализа. Если имена из каждого источника одинаковы каждый раз, то для меня лучше всего подходят и индексы построения. Это легко сделать в R:

Предположим, что у вас есть данные:

a<-data.frame(name=c('Ace','Bayes'),price=c(10,13))
b<-data.frame(name=c('Ace Co.','Bayes Inc.'),qty=c(9,99))

Создайте индекс имен для каждого источника один раз, возможно, используя pmatch и т. Д. В качестве отправной точки и затем проверять вручную.

a.idx<-data.frame(name=c('Ace','Bayes'),idx=c(1,2))
b.idx<-data.frame(name=c('Ace Co.','Bayes Inc.'), idx=c(1,2))

Затем для каждого слияния с использованием:

a.rich<-merge(a,a.idx,by="name")
b.rich<-merge(b,b.idx,by="name")
merge(a.rich,b.rich,by="idx")

Это даст нам:

  idx name.x price     name.y qty
1   1    Ace    10    Ace Co.   9
2   2  Bayes    13 Bayes Inc.  99
2
ответ дан Jyotirmoy Bhattacharya 25 August 2018 в 14:25
поделиться

Я также местный представитель Канады, признаю имена фондов.

Это сложно, так как каждый из поставщиков данных выбирает свою собственную форму для имен отдельных фондов. Некоторые используют разную структуру, как и весь конец либо в Фонде, либо в других классах. Кажется, что каждый выбирает свои собственные короткие формы, и они регулярно меняются.

Вот почему так много людей, как вы, делаете это вручную на регулярной основе. Некоторые из консалтинговых фирм перечисляют индексы для ссылки на различные источники, не уверены, изучили ли вы этот маршрут?

Как сказал Шейн и Марек, это совпадающая задача больше, чем прямое соединение. Многие компании борются с этим. Я в середине своей работы над этим ...

Jay

1
ответ дан Jay 25 August 2018 в 14:25
поделиться

Одно быстрое предложение: попробуйте выполнить некоторое сопоставление по разным полям отдельно, прежде чем использовать слияние. Самый простой подход - с функцией pmatch, хотя R не имеет недостатка в функциях согласования текста (например, agrep). Вот простой пример:

pmatch(c("med", "mod"), c("mean", "median", "mode"))

Для вашего набора данных это соответствует всем именам фонда из a:

> nrow(merge(a,b,x.by="Fund.Name", y.by="Fund.name"))
[1] 58
> length(which(!is.na(pmatch(a$Fund.Name, b$Fund.name))))
[1] 238

. После создания совпадений вы можете легко объединить они вместе используют их.

8
ответ дан Shane 25 August 2018 в 14:25
поделиться

Настоятельно рекомендуется использовать пакет dgrtwo / fuzzyjoin . stringdist_inner_join(a,b, by="Fund.Name")

11
ответ дан user3808394 25 August 2018 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: