Функция R для выполнения расчета в зависимости от категории для Spotfire - PullRequest
0 голосов
/ 17 июня 2020

У меня есть следующий сценарий 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" 
...