Anders ausgedrückt, wie aggregieren Sie eine Spalte (z. B. die column
), während eine andere die gleiche bleibt (z. B. die location
)?R & dplyr: wie mehr Spalten aus dem ursprünglichen Datenrahmen/Datentabelle nach summarize() enthalten?
Diese MWE veranschaulicht mein Problem. Wie würde ich nach summarise()
in der location
Spalte hinzufügen? Gibt es eine Lösung, die "eine Ebene höher geht" vor der summarise()
, damit ich die ursprünglichen Spalten beibehalten kann?
test <- as.data.table(data.frame(event_id = c("A","B","A","A","B"),
income = c(1,2,3,4,5),
location = c("PlaceX","PlaceY","PlaceX","PlaceX","PlaceY")))
test
event_id income location
1: A 1 PlaceX
2: B 2 PlaceY
3: A 3 PlaceX
4: A 4 PlaceX
5: B 5 PlaceY
test %>%
group_by(event_id) %>%
summarise(mean_inc = mean(income))
Source: local data table [2 x 2]
event_id mean_inc
(fctr) (dbl)
1 A 2.666667
2 B 3.500000
Die folgende funktioniert nicht:
test %>%
group_by(event_id) %>%
summarise(mean_inc = mean(income),
location = location)
Source: local data table [5 x 3]
event_id mean_inc location
(fctr) (dbl) (fctr)
1 A 2.666667 PlaceX
2 A 2.666667 PlaceX
3 A 2.666667 PlaceX
4 B 3.500000 PlaceY
5 B 3.500000 PlaceY
Meine gewünschte Ausgabe ist:
Source: local data table [2 x 3]
event_id location mean_inc
(fctr) (fctr) (dbl)
1 A PlaceX 2.666667
2 B PlaceY 3.500000
In diesem speziellen Fall können Sie einfach etwas wie 'location = unique (location)' oder include 'location' in' group_by' verwenden. Haben Sie einen komplizierteren Anwendungsfall? – aosmith
Danke, aber meine Daten haben mindestens 100 Variablen, so dass die Lösung schwer sauber zu skalieren scheint. – user2205916
Dann denke ich, dass dies ein besserer Ort sein könnte, um 'mutate' und dann' distinct' mit '.keep_all = TRUE' anstelle von' summarise' zu verwenden. – aosmith