2016-09-18 6 views
0

Ich bin neu in R und versuche herauszufinden, wie Daten in einem eindeutigen Format kombiniert und dann in eine Postgres-Datenbank eingegeben werden können. Hier ist der Code ein Beispiel für das Format zur Verfügung zu stellen:So aggregieren Sie Daten basierend auf Spalten

df <- data.frame("1"=c("us","fr","us","fr","de", "de"), "2"=c(35, 20, 35, 20, 22.25, 125), "3"=c(105, -67.56, 105, -67.56, 138, 12), "4"=c(100, 200, 80, 160, 50, 18)) 

colnames(df) <- c(
    "countryAbr", 
    "latitude", 
    "longitude", 
    "countOfResidents" 
    ) 

Hier wird der aktuelle Datensatz:

countryAbr latitude longitude countOfResidents 
1   us 35.00 105.00    100 
2   fr 20.00 -67.56    200 
3   us 35.00 105.00    80 
4   fr 20.00 -67.56    160 
5   de 22.25 138.00    50 
6   de 125  12     18 

Ich möchte die Daten kombinieren, bezogen auf das gesamte Vorkommen eines Landes, unter Berücksichtigung sowohl eindeutige als auch doppelte Breiten- und Längenkoordinaten. Ich möchte auch die Summe der Bewohner nehmen und kombinieren. Hier ist meine erwartete Endergebnis:

countryAbr TotalCountryOccurances TotalResidentCount 
1   us      2    180 
2   fr      2    360 
3   de      2     68 

ich die Zählfunktion verwendet, um die Gesamtvorkommen des Landes zu bekommen (ich glaube ??), aber nicht sicher, wie alles kombinieren und welche Funktionen zu nutzen.

countryCount <- count(df[,c("latitude", "longitude")]) 

Als ich das letzte Datensatz zu tun haben, würde Ich mag es in eine Postgres Tisch legen für die Abfrage und auf dem Front-End verwenden. Ich weiß, wie man Letzteres macht, nicht sicher, wie man R-Daten in die Postgres-Tabelle bringt.

** Edit für Klarheit in Bezug auf doppelte und einzigartige lat und lange **

+0

Vorgeschlagene Betrogene: [wie die Daten in R durch Gruppe zusammenzufassen] (http://stackoverflow.com/q/1660124/903061) – Gregor

+0

mit 'dplyr',' '' df%>% group_by (LandAbr)%>% summarize (TotalCountryOccurances = n(), TotalResidentCount = Summe (countOfResidents)) '' 'gibt Ihr benötigtes Ergebnis. – yeedle

Antwort

2

Wenn Sie die Anzahl der Zeilen und summieren die Zahl der Einwohner für jede eindeutige countryAbr zählen möchten, können Sie dplyr zu summarise diese Zählungen verwenden nach dem gruppieren von countryAbr:

library(dplyr) 
result <- df %>% group_by(countryAbr) %>% 
       summarise(TotalCountryOccurances=n(), TotalResidentCount=sum(countOfResidents)) 

Da wir durch jeden eindeutigen Wert in countryAbr gruppiert sind, die Funktion n() die Anzahl der Zeilen für die Gruppe zurückkehrt und die Funktion sum die Summe über th berechnet e Spalte countOfResidents für die Gruppe. In diesem Fall liegt die Zählung der Zeilen und der Summe über allen Werten von latitude und longitude für jeden eindeutigen Wert in countryAbr. Ich gehe davon aus, dass Sie das meinen:

unter Berücksichtigung sowohl eindeutige und doppelte Längen- und Breitenkoordinaten.

Mit den von Ihnen angegebenen Daten:

print(result) 
### A tibble: 3 x 3 
## countryAbr TotalCountryOccurances TotalResidentCount 
##  <fctr>     <int>    <dbl> 
##1   de      1     50 
##2   fr      2    360 
##3   us      2    180 
1

Sie das data.table Paket verwenden können

library(data.table) 
setDT(df) 
df[, .(TotalCountryOccurances = .N, TotalResidentCount = sum(countOfResidents)), 
    by = countryAbr] 
+0

Das data.table-Paket bietet zahlreiche Vorteile in Bezug auf Geschwindigkeit und Syntax. Wenn Sie R lernen, sollten Sie Tabellen nur als data.tables anstatt als Datenrahmen oder Matrizen speichern. – hedgedandlevered

Verwandte Themen