Errore di dcast: “Funzione di aggregazione mancante: default alla lunghezza”

La mia df aspetto:

 Id Task Type Freq 3 1 A 2 3 1 B 3 3 2 A 3 3 2 B 0 4 1 A 3 4 1 B 3 4 2 A 1 4 2 B 3 

Voglio ristrutturare per ID e ottenere:

 Id AB … Z 3 5 3 4 4 6 

Provai:

 df_wide <- dcast(df, Id + Task ~ Type, value.var="Freq") 

e ho ottenuto l’errore:

Manca la funzione di aggregazione: default alla lunghezza

    Non riesco a capire cosa mettere nel fun.aggregate . Qual è il problema?

    Il motivo per cui fun.aggregate questo avviso è nella descrizione di fun.aggregate (vedi ?dcast ):

    funzione di aggregazione necessaria se le variabili non identificano una singola osservazione per ciascuna cella di uscita. Il valore predefinito è la lunghezza (con un messaggio) se necessario ma non specificato

    Quindi, è necessaria una funzione di aggregazione quando c’è più di un valore per un punto nel vasto dataframe.

    Una spiegazione basata sui tuoi dati:

    Quando usi dcast(df, Id + Task ~ Type, value.var="Freq") ottieni:

      Id Task AB 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 usi dcast(df, Id ~ Type, value.var="Freq") ottieni questo (incluso un messaggio di avviso):

     Aggregation function missing: defaulting to length Id AB 1 3 2 2 2 4 2 2 

    Ora, guardando indietro nella parte superiore dei dati:

     Id Task Type Freq 3 1 A 2 3 1 B 3 3 2 A 3 3 2 B 0 

    Vedete 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 puoi inserire un solo valore in questo punto nel wide dataframe per ogni valore di type . Pertanto dcast desidera aggregare questi valori in un unico valore. La funzione di aggregazione predefinita è la length , ma puoi utilizzare altre funzioni di aggregazione come sum , mean , sd o una funzione personalizzata specificandole con fun.aggregate .

    Ad esempio, con fun.aggregate = sum ottieni:

      Id AB 1 3 5 3 2 4 4 6 

    Ora non c’è alcun avviso perché a dcast viene detto cosa fare quando c’è più di un valore: restituire la sum dei valori.