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"去算点和点之间的距离
: : 再从所有算出来的距离中挑比较近(抓某个比例)的那些房子出来观察
: : 但这个方法在目标不只有一个的时候可能就会变得比较麻烦,因为要把"每个目标"和"每栋房子"的组合都算过
: : 想要请问有没有可能做到:
: : 以每个目标为圆心,设定一个圆(先不考虑怎么决定半径大小),让系统去判定有哪些房子是落在这些范围里面的,就可以直接把他们抓出来看
: : [关键字]:
: : 范围内的资料