Короткий ответ - то, что можно использовать функциональность полнотекстового поиска Пост-ГРЭС со специализированной поисковой конфигурацией.
Начиная с Вашего контакта с названиями места, Ваш, вероятно, не хотят происходить, таким образом, можно использовать простую конфигурацию в качестве начальной точки. Можно также добавить стоп-слова, которые имеют смысл для названий места (с примерами выше, можно, вероятно, рассмотреть "Св.", "Святого" и "del" как стоп-слова).
А довольно основная схема установки Вашего специализированного ниже:
$SHAREDIR/tsearch_data
каталог Postgres. См. https://www.postgresql.org/docs/9.1/static/textsearch-dictionaries.html#TEXTSEARCH-STOPWORDS. pg_catalog.simple
в качестве шаблонного словаря). См. https://www.postgresql.org/docs/9.1/static/textsearch-dictionaries.html#TEXTSEARCH-SIMPLE-DICTIONARY. Другое соображение состоит в том, как рассмотреть интернационализацию. Кажется, что проблемой для Вашего второго примера (Ameca del Torro
по сравнению с Ameca Torro
) мог бы быть испанский по сравнению с английским представлением имени. Если это так, Вы могли также рассмотреть хранение и "локализованный" и "универсальное" (например, английский язык) версия названия города.
В конце, Ваш запрос (использующий полнотекстовый поиск) мог бы быть похожим на это (где 'места' являются названием Вашей поисковой конфигурации):
SELECT cities."id" FROM cities INNER JOIN "state" ON "state".id = cities.state_id WHERE "state".short_name = 'CA' AND TO_TSVECTOR('places', cities.name) @@ TO_TSQUERY('places', 'Los & Angeles')
Попробуйте использовать ggplot2:
dnow <- read.table("http://dpaste.com/88561/plain/")
library(ggplot2)
qplot(V1, colour=factor(V2), data=dnow, geom="density")
Вы также можете решить эту проблему с помощью пакета lattice.
require(lattice)
dnow <- read.table('http://dpaste.com/88561/plain/')
densityplot(~V1, groups=V2, data=dnow)
Использование базовой графики в виде спагетти-кода:
plot.multi.dens <- function(s)
{
junk.x = NULL
junk.y = NULL
for(i in 1:length(s))
{
junk.x = c(junk.x, density(s[[i]])$x)
junk.y = c(junk.y, density(s[[i]])$y)
}
xr <- range(junk.x)
yr <- range(junk.y)
plot(density(s[[1]]), xlim = xr, ylim = yr, main = "")
for(i in 1:length(s))
{
lines(density(s[[i]]), xlim = xr, ylim = yr, col = i)
}
}
dnow <- read.table("http://dpaste.com/88561/plain/")
library(sqldf)
x <- unlist(sqldf("select V1 from dnow where V2==0"))
y <- unlist(sqldf("select V1 from dnow where V2==1"))
z <- unlist(sqldf("select V1 from dnow where V2==2"))
plot.multi.dens(list(x,y,z))
library(Hmisc)
le <- largest.empty(x,y,.1,.1)
legend(le,legend=c("x","y","z"), col=(1:3), lwd=2, lty = 1)
При просмотре данных микрочипа мне часто приходилось делать это, поэтому я свернул это как часть библиотеки служебного кода, хранящейся на github: ARE.utils , в частности, функция plot.densities .
Она использует базовую графику, поэтому вы можете черпать вдохновение из этой функции для создания своей собственной или просто продавать ее оптом (но она полагается на некоторые другие функции в этой библиотеке):
(Вы можете, при желании, установить весь пакет, но я не обещаю, что эти функции победили » t измениться каким-то обратно несовместимым образом).
Это ' Нетрудно написать свою собственную такую функцию, но просто убедитесь, что у вас есть функция, выбирающая правильный диапазон по осям и так далее. В любом случае, вы могли бы затем использовать следующий код:
library(ARE.utils)
# Create a matrix dataset with separate observations in columns
dat <- matrix(c(rnorm(100), rnorm(100, mean=3),
rnorm(100, mean=3, sd=2)),
ncol=3)
# Plot them
plot.densities(dat, along='cols')
Это создаст три различных графика плотности на одной оси с их собственными цветами.