Re: [問題] 如何在座標上抓出特定範圍的資料

作者: Edster (Edster)   2015-10-30 23:46:53
library(sp)
data(meuse.grid)
coordinates(meuse.grid) <- ~x+y
plot(meuse.grid)
XY = coordinates(meuse.grid)
xy = XY[sample(nrow(XY),10),]
library(magrittr)
ExtractbyCircle = function(xy, XY, con){
d = as.matrix(dist(rbind(xy, XY)))[-1,1] %>% set_names(1:nrow(XY))
s = d[d<=con]
return(as.integer(names(s)))
}
SS = list()
for(i in 1:nrow(xy)){
SS[[i]] = ExtractbyCircle(xy=xy[i,], XY=XY, con = 100)
}
str(SS)
XY[SS[[1]],]
※ 引述《celestialgod (天)》之銘言:
: 示例如下,自行延伸:
: library(pracma)
: # circle
: circleFunc = function(r, x0 = 0, y0 = 0, n.split = 1000){
: cbind(r*cos(seq(0, 2*pi, length.out = n.split)) + x0,
: r*sin(seq(0, 2*pi, length.out = n.split)) + y0)
: }
: squreArea = matrix(runif(1000), 100)
: circlePoints = circleFunc(0.5, 0.5, 0.5)
: inCicle = inpolygon(squreArea[,1], squreArea[,2],
: circlePoints[,1], circlePoints[,2])
: plot(squreArea[,1], squreArea[,2],
: xlim = c(0,1), ylim = c(0,1), xlab = "x", ylab = "y")
: lines(circlePoints[,1], circlePoints[,2], col = "blue")
: points(squreArea[inCicle,1], squreArea[inCicle,2], col = "red")
: http://i.imgur.com/H1vyxBa.png
: 我之前是365萬個點,是用Rcpp逐點處理的 (距離矩陣要開滿大的滿麻煩的)
: 如果點不多的話,用inpolygon很快XD
: ※ 引述《allen63521 (GoGoPadres)》之銘言:
: : [問題類型]:
: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
: : [軟體熟悉度]:
: : 新手(沒寫過程式,R 是我的第一次)
: : [問題敘述]: 想要分析位在某些目標附近的資料
: : 手上有一筆關於不動產成交的資料,內容包含成交價格、坪數、該房屋位置的橫、縱座標
: : 我想要用散佈圖把所有data的橫、縱座標在平面座標上排出來,並且把幾個目標定位在座標上,去討論這幾個目標附近(可能是一個圓或是矩形範圍內)的房屋成交價
: : 目前的想法是:
: : 如果想討論的範圍是圓,可以對"該目標跟所有data"去算點和點之間的距離
: : 再從所有算出來的距離中挑比較近(抓某個比例)的那些房子出來觀察
: : 但這個方法在目標不只有一個的時候可能就會變得比較麻煩,因為要把"每個目標"和"每棟房子"的組合都算過
: : 想要請問有沒有可能做到:
: : 以每個目標為圓心,設定一個圓(先不考慮怎麼決定半徑大小),讓系統去判定有哪些房子是落在這些範圍裡面的,就可以直接把他們抓出來看
: : [關鍵字]:
: : 範圍內的資料
作者: allen63521 (GoGoPadres)   2015-10-31 12:05:00
謝謝回覆!等一下讀讀看

Links booklink

Contact Us: admin [ a t ] ucptt.com