Här är ett exempel med funktionen aggregates ()
Jag gjorde själv för en tid sedan:
# simulerar dataset.seed (666) (dat <- data . ram (grupp = gl (3,6), nivå = faktor (rep (c ("A", "B", "C"), 6)), y = rund (rnorm (18,10), 1) )) > dat gruppnivå y1 1 A 10.82 1 B 12.03 1 C 9.64 1 A 12.05 1 B 7.86 1 C 10.87 2 A 8.78 2 B 9.29 2 C 8.210 2 A 10.011 2 B 12.212 2 C 8.213 3 A 10.914 3 B 8.315 3 C 10.116 3 A 9.917 3 B 10.918 3 C 10.3 # aggregates () functionaggregates <- function (formula, data = NULL, FUNS) {if (class (FUNS) == "list") {f <- function (x) sapply (FUNS, funktion (kul) kul (x))} annat {f <- FUNS} temp <- aggregat (formel, data, f) ut <- data.frame (temp [, - ncol (temp)], temp [ , ncol (temp)]) kolumn (out) [1] <- colnames (temp) [1] return (out)} # exempel FUNS <- funktion (x) c (medel = rund (medel (x), 0), sd = rund (sd (x), 0 )) (ag <- aggregat (y ~ grupp: nivå, data = dat, FUNS = FUNS))
Det ger följande resultat:
> ag gruppnivå medelvärde sd1 1 A 11 12 2 A 9 13 3 A 10 14 1 B 10 35 2 B 11 26 3 B 10 27 1 C 10 18 2 C 8 09 3 C 10 0
Kanske kan du få samma resultat från R-split ():
> med (dat, sapply (split (y, group: level), FUNS)) 1: A 1: B 1: C 2: A 2: B 2: C 3: A 3: B 3: Cmean 11 10 10 9 11 8 10 10 10sd 1 3 1 1 2 0 1 2 0
Låt mig komma tillbaka till utdata från funktionen aggregates
. Du kan förvandla den i en vacker tabell med omforma ()
, xtabs ()
och ftable ()
:
rag <- omformning (ag, varierande = lista (3: 4), riktning = "lång", v.names = "y") rag $ tid <- faktor (rag $ tid) ft <- ftable (xtabs (y ~ grupp + nivå + tid, data = rag)) attribut (ft) $ col.vars <- list (c ("medel", "sd"))
Detta ger:
> ft medelvärde sdgruppnivå 1 A 11 1 B 10 3 C 10 12 A 9 1 B 11 2 C 8 03 A 10 1 B 10 2 C 10 0 kod >
Vackert, eller hur? Du kan exportera denna tabell till en pdf med funktionen textplot ()
för paketet gplots
.
Se här för andras lösningar.