Gruppe Variablen in einem dataframe R mit einer bestimmten Liste
Habe ich die folgenden Listen an:
group1<-c("A", "B", "D")
group2<-c("C", "E")
group3<-c("F")
und einen dataframe mit den Werten und entsprechenden Namen:
df <- data.frame (name=c("A","B","C","D","E","F"),value=c(1,2,3,4,5,6))
df
name value
1 A 1
2 B 2
3 C 3
4 D 4
5 E 5
6 F 6
Ich würde gerne um die Daten zu gruppieren, basierend auf den Listen, mit den Namen der Spalte;
df
name value group
1 A 1 group1
2 B 2 group1
3 C 3 group2
4 D 4 group1
5 E 5 group2
6 F 6 group3
und die Summe der Werte für jede Gruppe.
df
group sum
1 group1 7
2 group2 8
3 group3 6
Ich gesucht habe für ähnliche Beiträge, aber nicht mit Ihnen für mein problem.
InformationsquelleAutor user2904120 | 2013-11-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Ansatz. Erstens, nutzen
ifelse
zu Gruppen zuordnen, um jedesname
, dann verwenden Sieaggregate
um die Summe für jedegroup
.Eine weitere Frage ist dann, sagen wir, der erste df enthält mehrere Spalten (Wert1, Wert2, Wert2), was ist die beste Möglichkeit für die Anwendung von Aggregatfunktionen auf alle Spalten.
versuchen
aggregate(cbind(value1,value2,...,valueN) ~ group, sum, data=df)
perfekt! Dank
InformationsquelleAutor Jilber Urbina
Ich würde vorschlagen, dass Ihre Gruppierung als Daten.Rahmen, etwas entlang diesen Linien -
InformationsquelleAutor TheComeOnMan
Andere Idee:
BEARBEITEN
Wie bereits von @thelatemail in den Kommentaren unten können Sie
mget
-in eine Liste, die alle Objekte in Ihrem workspace namens "group_", wie dieses:Im Fall, wenn Sie geladen haben -sagen - eine Funktion namens "group4", diese Funktion ausgewählt wird auch in
ls()
. Ein Weg, um dies zu vermeiden, ist die Verwendung so etwas wie:Die zurückgegebene Liste von
mget
können, dann, alslevels(df$X)
.levels(df$X) <- mget(ls(pattern="group\\d+"))
Ha, genau das, was ich dachte! Aber wenn ich
pattern = "group"
eine Funktion von mir, die geladen wurde, genanntgroupby
wieder zurückgegeben zu, und dann hatte ich nicht mehr Zeit zu verbringen auf Sie. Deine Idee, abergrep
ping "group" gefolgt von einer Ziffer ist die beste option. Ich werde Bearbeiten Sie meine Antwort mit einem workaround habe ich gemacht, aber fühlen Sie sich frei zu Bearbeiten, wenn Sie etwas besseres hinzufügen. Danke!InformationsquelleAutor alexis_laz