Domanda

La funzione cast() è grande a calcolare i margini per valori aggregati:

cast(df, IDx1+IDx2~IDy1, margins=c('IDx1','IDx2','grand_row'),c(min, mean, max))

Il problema è che ho bisogno di peso il mio mezzo utilizzando un secondo vettore e una funzione personalizzata.

Naturalmente, ddply() mi permette di applicare funzioni di aggregazione personalizzata per i miei record raggruppati:

ddply(d, IDx1+IDx2~IDy1 , function(x) 
c(
min(x$value),
MyFancyWeightedHarmonicMeanFunction(x$value,x$weight),
max(x$value)
)
)

... e questo è impressionante.

Ma cosa sarebbe davvero salvare il giorno è la possibilità di fare entrambe le cose contemporaneamente, sia chiamando la funzione a due vettore in cast() o falsificare qualche modo la variabile margins=() in ddply().

È possibile?

È stato utile?

Soluzione

E 'abbastanza per calcolare i margini di te stesso:

ddply(d, "IDX1", ...) 
ddply(d, c("IDX1", "IDX2"), ...)
ddply(d, "IDy1", ...)

e quindi combinare i risultati insieme a rbind. Non sarebbe troppo difficile da avvolgere questo in una funzione generale.

Inoltre, mi piacerebbe riscrivere il codice originale come:

ddply(d, IDx1+IDx2~IDy1, summarise, 
  min = min(value),
  wt.mean = MyFancyWeightedHarmonicMeanFunction(value, weight),
  max = max(value)
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top