Im sure someone better than me has a more elegant solution but this is what I ended up doing to randomly sample each 1000 by 1000 grid in a matrix that was 7000 by 140000. Its long-winded but it works
Setting a min and max value for the random number (1 and 1000) and working row by row to randomly select a row value and a column value and plucking that number out of the matrix.
It does this seven times for the first row (7000/1000).
Then adds 1000 to the min and max values for the second row
Each time the values are plucked they are stored to "g" and attached to df_new using rbind.
The repeats until I get to row 14 them some tidy up of the data and renaming.
The end is a data frame of 98 values along with the grid number they came from and its x and y coordinates in the matrix
Not very flexible and fixed for matrix 7000 by 14000 and grids that are 1000 by 1000. But I don't need to change this..... yet !!!
My wish list down the track would be a function that lets me set..
- the grid size (x and y) so i can have rectangular grids
- the number of samples plucked from each grid ( 1, 2, 3, or more)
Thanks all for your input. Much appreciated.
# MAKE A DUMMY MATRIX
set.seed(123)
df <- data.frame(matrix(runif(7000*14000), 14000))
# PICK 1 RANDOM VALUE FROM EACH 1000 BY 1000 GRID
# STARTING WITH THE TOP ROW (GRIDS 1 TO 7)
# THEN THE NEXT ROW (GRIDS 8 TO 9) ETC ETC
# UNITL GRID 98
set.seed(42)
# 1st row of grids
min=1
max=1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
df_new = c(ran_c, ran_r, df[ran_r,ran_c])
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 2nd row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 3rd row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 4th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 5th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 6th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 7th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 8th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 9th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 10th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 11th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 12th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 13th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# 14th row of grids
min = min + 1000
max = max +1000
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1,1000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,1001,2000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,2001,3000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,3001,4000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,4001,5000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,5001,6000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
ran_r = round(runif(1,min,max),0)
ran_c = round(runif(1,6001,7000),0)
g = c(ran_c, ran_r, df[ran_r,ran_c])
df_new = rbind(df_new, g)
# SOME DATA TIDYING
library(dplyr)
df_new = as.data.frame(df_new) # convert to data frame
df_new = df_new %>% mutate(grid = 1:n()) # add a sequential column named grid
df_new = df_new %>%
relocate(grid)
rownames(df_new)<-c(1:nrow(df_new)) # add row names 1 to 98 or nrow(df_new)
df_new = df_new %>%
rename(
x = 2,
y = 3,
value = 4) # rename columns
# Clear data no longer needed to prepare for next run
rm(g)
rm(max)
rm(min)
rm(ran_c)
rm(ran_r)