看板 R_Language 關於我們 聯絡資訊
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"去算點和點之間的距離 : : 再從所有算出來的距離中挑比較近(抓某個比例)的那些房子出來觀察 : : 但這個方法在目標不只有一個的時候可能就會變得比較麻煩,因為要把"每個目標"和"每棟房子"的組合都算過 : : 想要請問有沒有可能做到: : : 以每個目標為圓心,設定一個圓(先不考慮怎麼決定半徑大小),讓系統去判定有哪些房子是落在這些範圍裡面的,就可以直接把他們抓出來看 : : [關鍵字]: : : 範圍內的資料 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.12.185 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1446220015.A.909.html ※ 編輯: Edster (111.249.20.219), 10/31/2015 08:14:06
allen63521: 謝謝回覆!等一下讀讀看 10/31 12:05