Aggiunta di una colonna di medie per gruppo ai dati originali

Voglio aggiungere una colonna di data.frame in base alla colonna dei fattori in R data.frame . Come questo:

 df1 <- data.frame(X = rep(x = LETTERS[1:2], each = 3), Y = 1:6) df2 <- aggregate(data = df1, Y ~ X, FUN = mean) df3 <- merge(x = df1, y = df2, by = "X", suffixes = c(".Old",".New")) df3 # X Y.Old Y.New # 1 A 1 2 # 2 A 2 2 # 3 A 3 2 # 4 B 4 5 # 5 B 5 5 # 6 B 6 5 

Per realizzare questo problema devo creare due data.frames non data.frames . Mi piacerebbe sapere un modo per aggiungere una colonna di data.frame per colonna di fattori nel mio data.frame originale senza creare ulteriori data.frames . Grazie per il tuo tempo e aiuto.

Questo è ciò a cui serve la funzione ave .

 df1$Y.New < - ave(df1$Y, df1$X) 

Due modi alternativi per farlo:

1. con il pacchetto dplyr :

 library(dplyr) df1 < - df1 %>% group_by(X) %>% mutate(Y.new = mean(Y)) 

2. con il pacchetto data.table :

 library(data.table) setDT(df1)[, Y.new := mean(Y), by = X] 

entrambi danno il seguente risultato:

 > df1 XY Y.new 1: A 1 2 2: A 2 2 3: A 3 2 4: B 4 5 5: B 5 5 6: B 6 5 

ddply e transform in soccorso (anche se sono sicuro che avrai almeno 4 modi diversi per farlo):

 library(plyr) ddply(df1,.(X),transform,Y.New = mean(Y)) XY Y.New 1 A 1 2 2 A 2 2 3 A 3 2 4 B 4 5 5 B 5 5 6 B 6 5 

Joran ha risposto magnificamente, Questa non è una risposta alla tua domanda ma un’estensione della conversazione. Se stai cercando una tabella di medie per la relazione di due variabili categoriali con una dipendente, ecco la funzione Hadley per questo:

 cast(CO2, Type ~ Treatment, value="uptake", fun.aggregate=mean, margins=TRUE) 

Ecco una panoramica dei dati sulla CO2 e uno sguardo alla tabella delle medie:

 > head(CO2) Plant Type Treatment conc uptake 1 Qn1 Quebec nonchilled 95 16.0 2 Qn1 Quebec nonchilled 175 30.4 3 Qn1 Quebec nonchilled 250 34.8 4 Qn1 Quebec nonchilled 350 37.2 5 Qn1 Quebec nonchilled 500 35.3 6 Qn1 Quebec nonchilled 675 39.2 > library(reshape) > cast(CO2, Type ~ Treatment, mean, margins=TRUE) Type nonchilled chilled (all) 1 Quebec 35.33333 31.75238 33.54286 2 Mississippi 25.95238 15.81429 20.88333 3 (all) 30.64286 23.78333 27.21310