У меня есть следующий сценарий PFA, и я хочу, чтобы расчет выполнялся путем их категориальной группировки, а не для всех данных. У меня есть столбец «Зона и местоположение», в котором отображается их категория. Из небольшого исследования, которое я провел, функция "group_by" должна уметь это делать, но я новичок в языке R, поэтому я не уверен, как реализовать эту функцию в найденном мной скрипте.
install_load <- function (package1, ...) {
# convert arguments to vector
packages <- c(package1, ...)
# start loop to determine if each package is installed
for(package in packages){
# if package is installed locally, load
if(package %in% rownames(installed.packages()))
do.call('library', list(package))
# if package is not installed locally, download, then load
else {
install.packages(package, repos="https://cloud.r-project.org/")
do.call("library", list(package))
}
}
}
Distance <- function(Lat1, Long1, Lat2, Long2){
distance <- distm(c(Long1,Lat1), c(Long2,Lat2))
return(distance)
}
#"Mid Lateral Longitude"
install_load('FNN','rgeos','sp', 'geosphere')
Points<-Points[complete.cases(Points[,c("Mid Lateral Longitude","Mid Lateral Latitude")]),]
Points<-unique(Points[,c("API","Mid Lateral Longitude","Mid Lateral Latitude")])
coordinates(Points)<-c("Mid Lateral Longitude","Mid Lateral Latitude")
dist_mat<-get.knnx(Points@coords,Points@coords, k=2, algorithm=c("kd_tree"))
Points@data <- cbind(data.frame(Points@coords), API=Points@data$API, Closest_API=Points@data[dist_mat$nn.index[,2],"API"])
Points@data <- cbind(Points@data,Closest_Lat=Points@data[dist_mat$nn.index[,2],"Mid.Lateral.Latitude"], Closest_Long=Points@data[dist_mat$nn.index[,2],"Mid.Lateral.Longitude"])
Points@data$Closest_Distance <- apply(Points@data[,c("Mid.Lateral.Latitude", "Mid.Lateral.Longitude", "Closest_Lat", "Closest_Long")], 1, function(y) Distance(y['Mid.Lateral.Latitude'], y['Mid.Lateral.Longitude'], y['Closest_Lat'], y['Closest_Long']))
closestPoints<-Points@data[,c("Mid.Lateral.Longitude", "Mid.Lateral.Latitude","API","Closest_API","Closest_Distance")]
names(closestPoints)[names(closestPoints) == "Mid.Lateral.Latitude"] <- "Mid Lateral Latitude"
names(closestPoints)[names(closestPoints) == "Mid.Lateral.Longitude"] <- "Mid Lateral Longitude"