Neue Spalte mit Ergebnis einer Berechnung erzeugen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
jimjay203
Beiträge: 2
Registriert: Fr Dez 06, 2019 3:59 pm

Neue Spalte mit Ergebnis einer Berechnung erzeugen

Beitrag von jimjay203 »

Hallo zusammen,

ich bin noch recht neu in der Welt von R und hab eine Frage an der ich mir aktuell die Zähne ausbeiße...

Ich habe zwei Tabellen mit Adressen, Geo-Daten (Breiten- und Längengrad) und weiteren Informationen. Jetzt würde ich gerne die Geo-Daten aus jeder Zeile in Tabelle1 mit jeder Zeile in Tabelle 2 vergleichen und das Ergebnis (die Anzahl aller Adressen, die im Umkreis X Metern liegen) in eine neue Spalte in Tabelle1 schreiben. Die Funktionen für die Berechnung der Distanz sehen wie folgt aus:

Code: Alles auswählen

degreesToRadians <- function(deg){
  rad = deg * pi / 180
  
  return(rad)
}

locationDistance <- function(lat1, lon1, lat2, lon2){
  lat1 <- degreesToRadians(lat1)
  lon1 <- degreesToRadians(lon1)
  lat2 <- degreesToRadians(lat2)
  lon2 <- degreesToRadians(lon2)
  equRad <- 6378137
  
  distance = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))*equRad
  
  return(distance)
}
Wenn ich jetzt die Funktion aufrufe, lat1 und lat2 manuell mit Geo-Daten aus Tabelle1 fülle und mit den Geo-Daten aus Tabelle2 vergleiche, bekomme ich richtige Ergebnisse:

Code: Alles auswählen

> sum(locationDistance(53.57522, 8.58286, tabelle2$lat, tabelle2$lon) <= 25)
[1] 1
> sum(locationDistance(53.57522, 8.58286, tabelle2$lat, tabelle2$lon) <= 250)
[1] 181
> 
Was ich nicht hinbekomme ist es, diese Berechnung auf alle Zeilen in Tabelle1 anzuwenden und das Ergebnis in eine neue Spalte zu schreiben. Kann mir jemand von euch helfen?

LG
Jimmy
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Neue Spalte mit Ergebnis einer Berechnung erzeugen

Beitrag von Athomas »

So, wie Du es beschrieben hast, musst Du das "kartesische Produkt" der beiden Dateien bilden (etwa mit "merge") und die Entfernung der Kombinationen voneinander ausrechnen!?

Das können natürlich schnell recht viele werden!
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Neue Spalte mit Ergebnis einer Berechnung erzeugen

Beitrag von EDi »

diese Berechnung auf alle Zeilen in Tabelle1 anzuwenden
Pseudo-code (da reprodzierbares Beispiel fehlt):

Code: Alles auswählen

for (row in seq_len(nrow(tabelle1))) {
locationDistance(tabelle1$lat[row], tabelle1$lon[row], tabelle2$lat, tabelle2$lon) 
}
oder funktionell geschrieben:

Code: Alles auswählen

sapply(seq_len(nrow(tabelle1)), function(row) locationDistance(tabelle1$lat[row], tabelle1$lon[row], tabelle2$lat, tabelle2$lon) )
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
jimjay203
Beiträge: 2
Registriert: Fr Dez 06, 2019 3:59 pm

Re: Neue Spalte mit Ergebnis einer Berechnung erzeugen

Beitrag von jimjay203 »

EDi hat geschrieben: Fr Dez 06, 2019 11:51 pm oder funktionell geschrieben:

Code: Alles auswählen

sapply(seq_len(nrow(tabelle1)), function(row) locationDistance(tabelle1$lat[row], tabelle1$lon[row], tabelle2$lat, tabelle2$lon) )
Vielen Dank EDi! Damit läufts jetzt. Ich werde in der Zukunft versuchen daran zu denken ein reproduzierbares Beispiel zu geben.

Schönes WE
Antworten