2011-09-27 16 views
11

Mam ramki danych, który wygląda tak:Jak użyć polecenia ddply, aby dodać kolumnę do ramki danych?

site date var dil 
    1 A 7.4 2 
    2 A 6.5 2 
    1 A 7.3 3 
    2 A 7.3 3 
    1 B 7.1 1 
    2 B 7.7 2 
    1 B 7.7 3 
    2 B 7.4 3 

muszę dodać kolumnę o nazwie wt do tego dataframe który zawiera współczynnik wagowy potrzebne do obliczenia średniej ważonej. Ten współczynnik ważenia należy wyprowadzić dla każdej kombinacji site i date.

Podejście używam jest zbudowany funkcję obliczania współczynnika dodatek wyrównawczy:

> weight <- function(dil){ 
        dil/sum(dil) 
        } 

następnie zastosować funkcję dla każdej kombinacji site i date

> df$wt <- ddply(df,.(date,site),.fun=weight) 

ale dostaję ten komunikat o błędzie:

Error in FUN(X[[1L]], ...) : 
    only defined on a data frame with all numeric variables 
+4

spróbować 'df = ddply (. Df (data, miejscu), przekształcać, wt = waga (DIL))' – Ramnath

+0

Thanks Ramnath, że działało idealnie – matteo

Odpowiedz

15

Jesteś prawie na miejscu. Zmodyfikuj swój kod, aby korzystać z funkcji transform. To pozwala na dodanie kolumny do data.frame wewnątrz ddply:

weight <- function(x) x/sum(x) 

ddply(df, .(date,site), transform, weight=weight(dil)) 

    site date var dil weight 
1 1 A 7.4 2 0.40 
2 1 A 7.3 3 0.60 
3 2 A 6.5 2 0.40 
4 2 A 7.3 3 0.60 
5 1 B 7.1 1 0.25 
6 1 B 7.7 3 0.75 
7 2 B 7.7 2 0.40 
8 2 B 7.4 3 0.60 
+1

Aby użyć ddply, musisz mieć zainstalowany pakiet plyr – sshevlyagin

Powiązane problemy