Il motivo per cui si stanno ottenendo questo avvertimento è nella descrizione del fun.aggregate
(vedi ?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
Quindi, una funzione di aggregazione è necessaria quando non v'è più di un valore per un posto nella vasta dataframe.
Una spiegazione sulla base di dati:
Quando si utilizza dcast(df, Id + Task ~ Type, value.var="Freq")
si ottiene:
Id Task A B
1 3 1 2 3
2 3 2 3 0
3 4 1 3 3
4 4 2 1 3
Il che è logico, perché per ogni combinazione di Id
, Task
e Type
c'è solo valore in Freq
. Ma quando si utilizza dcast(df, Id ~ Type, value.var="Freq")
si ottiene questo (tra cui un messaggio di avviso):
Aggregation function missing: defaulting to length
Id A B
1 3 2 2
2 4 2 2
Ora, guardando indietro la parte superiore dei suoi dati:
Id Task Type Freq
3 1 A 2
3 1 B 3
3 2 A 3
3 2 B 0
a capire perché questo è il caso. Per ogni combinazione di Id
e Type
ci sono due valori in Freq
(per Id 3: 2
e 3
per A
& 3
e 0
per tipo B
) mentre si può solo mettere un valore in questo luogo nel vasto dataframe per ogni valore di type
. Pertanto, dcast
desidera aggregare questi valori in un unico valore. La funzione di aggregazione predefinita è length
, ma è possibile utilizzare altre funzioni di aggregazione come sum
, mean
, sd
o una funzione personalizzata specificandole con fun.aggregate
.
Ad esempio, con fun.aggregate = sum
si ottiene:
Id A B
1 3 5 3
2 4 4 6
Ora non v'è alcun avviso perché dcast
che viene detto cosa fare quando c'è più di un valore: restituire la somma dei valori.
In base all'esempio mostrato, non ricevo alcun avviso. Se si dispone di duplicati, potrebbe essere necessario creare una colonna di sequenza – akrun
Se è necessario il 'sum' (basato sull'output previsto mostrato)' dcast (df, Id ~ Type, value.var = 'Freq', sum) ' – akrun
Grazie Jaap! Non sono sicuro di comprendere appieno la tua spiegazione: le mie prime due colonne (Id e Attività) devono essere compresse da due righe a una. È questo il motivo per cui ho bisogno della funzione fun.aggregate? E se è così - perché "somma"? Non li sto riassumendo. – user3315563