2015-03-19 4 views
0

Я думал, что R будет хорошо для этого ... но я полный новичок в этом. У меня есть набор британских почтовых индексов (например, «CB2 8UR») и отдельная таблица, которая отображает каждый почтовый индекс в координату сетки ОС. Оба начинаются как CSV:Как построить почтовые индексы и их «центр масс»

file1: 
    "pcd" 
    "CB2 8UR" 
    "TE3 5LJ" 

file2: 
    "pcd","col2","col3","oseast1m","osnrth1m","col6",... 
    ... 
    "CB2 8UR","?","?",9823,2034,"?" 
    ... 

Реальный file1 имеет тысячу или около записей, а реальный file2 имеет несколько сотен тысяч (и около 20 столбцов). Единственным пунктом файла2 здесь является преобразование почтового индекса в координату сетки ОС Великобритании. На данный момент я думаю, что я могу рассматривать коорды как находящиеся на 2-м самолете.

Задача состоит в том, чтобы получить карту с «центром масс» каждого почтового индекса, отмеченного вместе с отображением почтовых индексов.

мне удалось построить file2 данных (т.е. все почтовые индексы Великобритании) в бункерах с помощью qplot() + stat_bin2d():

m <- qplot(xlab="Longitude",ylab="Latitude",main="Postcode heatmap",geom="blank",x=pcd$oseast1m,y=pcd$osnrth1m,data=pcd) + stat_bin2d(bins =200,aes(fill = log1p(..count..))) 

где PCD является data.frame чтения из file2.

Итак:

  • Как объединить file1 и файл для отображения только коды в file1, но с использованием COORDS в file2?

  • Как я могу вычислить и добавить маркер для центра масс?

  • Если бы я хотел отметить некоторые специальные «почтовые индексы», поэтому их «масса» была выше, чем обычно, это было бы просто сделать?

Большое спасибо за вашу помощь.

ответ

0

Вот код, который может помочь вашему прогрессу. Во-первых, на основе кадра данных игрушек мы используем пакет dplyr для объединения двух файлов данных на основе переменной pcd.

Тогда это за пределами моего знакомства, но я предлагаю некоторый код для поиска центроидов ваших данных и их построения.

library(dplyr) 
post.codes <- data.frame(id = c(1, 2), pcd = c("CB2 8UR", "TE3 5LJ")) 

coords <- data.frame(pcd = c("CB2 8UR", "TE3 5LJ"), coord1 = c("9823", "5555"), coord2 = c("2034", "1234"), 
        othervar = c("XYZ", "ABC"), stringsAsFactors = FALSE) 

merged <- left_join(post.codes, coords, by = "pcd") 

Далее, используйте kmeans из встроенного пакета статистики, чтобы найти и добавить центроиды. Надеюсь, этот код выходит за рамки псевдокода, но только направленный.

merged$centroid <- cbind(kmeans(merged$[the variable to cluster, 2)$cluster) 

centroids <- df %>% group_by(centroid) %>% summarise(average = mean(centroid)) 
library(ggplot2) 
ggplot(centroids, aes([coord1, coord2, color=factor(notsurewhatgoes here))) + 
    geom_point(size=3)+ geom_point(data=centroids, size=5) 

В-третьих, если вы хотите, чтобы отметить или выделить определенные коды (Центроиды?), Общий подход должен был бы создать новую переменную фактор, где коды должны быть выделены истинны, а другие ложны. Затем в ggplot вы делаете что-то на основе этого фактора, например fill = highlight factor. Все TRUES будут иметь один цвет заливки, а все остальные будут иметь другой цвет по умолчанию. Вы можете использовать scale_fill_manual(values = c("yourdesiredcolor", "yourseconddesiredcolor"), чтобы выбрать цвета, отличные от стандартных

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