I have a cloud of data (X,Y,Z,thickness) In R, I would like calculate my standard deviation by element compared to his neighbors the close ones.
My first code is :
CubeSize = 50
#Run on all element
for (i in 1:length(Data_Ext)){
#Create un data.frame for all points in range of my CubeSize
CarreMobile <- Data_Ext %>%
filter(X < Data_Ext$X[i] + CubeSize) %>%
filter(X > Data_Ext$X[i] - CubeSize) %>%
filter(Y < Data_Ext$Y[i] + CubeSize) %>%
filter(Y > Data_Ext$Y[i] - CubeSize) %>%
filter(Z < Data_Ext$Z[i] + CubeSize) %>%
filter(Z > Data_Ext$Z[i] - CubeSize)
#Calculate the Standard deviation
Data_Ext2$SD[i] <- sd(CarreMobile$th)
}
It do the job, but I have 2 millions points... It's 2 days of calcul. So I try that :
CubeSize = 50
Data_Ext$Xmax <- Data_Ext$X + CubeSize
Data_Ext$Xmin <- Data_Ext$X - CubeSize
Data_Ext$Ymax <- Data_Ext$Y + CubeSize
Data_Ext$Ymin <- Data_Ext$Y - CubeSize
Data_Ext$Zmax <- Data_Ext$Z + CubeSize
Data_Ext$Zmin <- Data_Ext$Z - CubeSize
Data_Ext<- Data_Ext %>%
mutate(SD = sd(Data_Ext %>%
filter(X < Xmax) %>%
filter(X > Xmin) %>%
filter(Y < Ymax) %>%
filter(Y > Ymin) %>%
filter(Z < Zmax) %>%
filter(Z > Zmin)
)
)
But this one don't work. Do you have a solution to not use for
Data
set.seed(1)
Data_Ext<- data_frame(X = sample(900:1000, 100, replace = TRUE),
Y = sample(900:1000, 100, replace = TRUE),
Z = sample(90:100, 100, replace = TRUE),
Th = sample(10:20, 100, replace = TRUE)
)