Der Grund, warum Sie diese Warnung erhalten in der Beschreibung von fun.aggregate
ist (siehe ?dcast
):
aggregation function needed if variables do not identify a single observation for each output cell. Defaults to length (with a message) if needed but not specified
So wird eine Aggregationsfunktion benötigt, wenn es mehr als einen Wert für einen Platz in der Breite von Datenrahmen.
Eine Erklärung auf der Grundlage Ihrer Daten:
Wenn Sie dcast(df, Id + Task ~ Type, value.var="Freq")
erhalten Sie:
Id Task A B
1 3 1 2 3
2 3 2 3 0
3 4 1 3 3
4 4 2 1 3
Welche weil für jede Kombination von Id
, Task
und Type
nur Wert logisch ist in Freq
. Aber wenn man dcast(df, Id ~ Type, value.var="Freq")
verwenden Sie diese erhalten (einschließlich einer Warnmeldung):
Aggregation function missing: defaulting to length
Id A B
1 3 2 2
2 4 2 2
nun am oberen Teil Ihrer Daten im Rückblick:
Id Task Type Freq
3 1 A 2
3 1 B 3
3 2 A 3
3 2 B 0
Sie sehen, warum dies der Fall ist. Für jede Kombination von Id
und Type
gibt es zwei Werte in Freq
(für Id 3: 2
und 3
für A
& 3
und 0
für Typen B
), während Sie nur einen Wert an dieser Stelle in dem breiten Datenrahmen für jeden Wert von type
setzen können . Daher möchte dcast
diese Werte in einem Wert aggregieren. Die Standardaggregationsfunktion ist length
, aber Sie können andere Aggregationsfunktionen wie sum
, mean
, sd
oder eine benutzerdefinierte Funktion verwenden, indem Sie sie mit fun.aggregate
angeben.
Zum Beispiel mit fun.aggregate = sum
Sie erhalten:
Id A B
1 3 5 3
2 4 4 6
Nun gibt keine Warnung, weil dcast
erzählt wird, was zu tun ist, wenn es mehr als ein Wert ist: Rückgabe der Summe der Werte.
Basierend auf dem gezeigten Beispiel, bekomme ich keine Warnungen. Wenn Sie Duplikate haben, müssen Sie möglicherweise eine Sequenzspalte erstellen – akrun
Wenn Sie die 'Summe' benötigen (basierend auf der erwarteten Ausgabe)' dcast (df, Id ~ Typ, Wert.var = 'Freq', Summe) ' – akrun
Danke Jaap! Ich bin mir nicht sicher, ob ich Ihre Erklärung vollständig verstanden habe: Meine ersten beiden Spalten (ID und Aufgabe) müssen von zwei Zeilen auf eine reduziert werden. Ist das der Grund, warum ich die Funktion fun.aggregate brauche? Und wenn ja - warum "summieren"? Ich fasse sie nicht zusammen. – user3315563