2017-03-29 52 views
2

我有數據與XY上的矩形網格使用XY打破網格到50個平方亞基中的R座標

dX <- runif(1000,0, 500) 
dY <- runif(500,0, 500) 
d <- data.frame(dX, dY) 

我要分配50「曲線號碼」到這個數據座標,從而使得任何介於0 -100 dX和0-100 dY是plot 1. 100-200 dX和1000-200 dY之間的任何值都是plot 2.等等我可以想象寫50行代碼來做到這一點,但我真的更願意寫1!

+0

的'cut'功能可能是你需要什麼 –

回答

4

這是一個使用基本R函數cutinteraction的解決方案。

d$gridGroup <- interaction(cut(d$dX, breaks=seq(0, 1000, by=100)), 
          cut(d$dY, breaks=seq(0, 1000, by=100)), sep="X") 

head(d) 
     dX  dY   gridGroup 
1 56.85171 418.8170 (0,100]X(400,500] 
2 311.14970 243.7331 (300,400]X(200,300] 
3 304.63737 55.1685 (300,400]X(0,100] 
4 311.68972 175.6815 (300,400]X(100,200] 
5 430.45769 380.5315 (400,500]X(300,400] 
6 320.15530 194.8324 (300,400]X(100,200] 

這會生成一個因子變量,其中包含對應於X網格和Y網格的有用參考標籤。正如評論中所建議的那樣,cut可用於生成一個因子變量來描述連續變量的間隔。然後interaction可用於產生兩個區間變量的相互作用。

數據

set.seed(1234) 
dX <- runif(1000,0, 500) 
dY <- runif(500,0, 500) 
d <- data.frame(dX, dY) 
2
#DATA 
set.seed(42) 
dX <- runif(1000,0, 500) 
dY <- runif(500,0, 500) 
d <- data.frame(dX, dY) 

x_grid = seq(0, 500, 500/5)[-1] 
y_grid = seq(0, 500, 500/5)[-1] 
grids = expand.grid(x_grid, y_grid) 
dX2 = ceiling(d$dX/100)*100 
dY2 = ceiling(d$dY/100)*100 
d$group = match(paste(dX2,dY2,sep = "-"), paste(grids$Var1,grids$Var2,sep="-")) 
plot(d$dX, d$dY, type = "p", col = d$group, pch = 19) 

enter image description here