2013-05-09 26 views
5

Plyr'de sonuç sütununa bir değişkenin değerini atamanın bir yolu var mı? Yani bu kodda ...Bir değişkenin değerini plyr'de sütun adına nasıl atayabilirim?

column_name <- 'total' 
df <- data.frame(a=c('a','b'), b=c(1,2)) 
ddply(df, .(a), summarise, column_name=sum(b)) 

Bildiğiniz gibi, bu değişkenlerin a ve column_name oluşan bir veri çerçevesi tükürür. Bununla birlikte, onu almak istediğim, total ve total değişkenlerinin bir değişken tarafından dinamik olarak atanan a ve total değişkenleridir, çünkü aslında bir dize içinde doğrudan belirtemediğim bir döngü içinde işlemek istiyorum.

Size bilgi için bu kod çalışmaz.

ddply(df, .(a), summarise, get(column_name)=sum(b)) 

Bununla başa çıkmak için herhangi bir çözüm var mı?

+0

http://stackoverflow.com/questions/14721592/r-dynamically-build-list-in-data-table-or-ddply işaret yararlı olabilir bir yönde. – mnel

cevap

6

birkaç yolu vardır:

> column_names <- c('total', 'latot') 
> df <- data.frame(a=c('a','b'), b=c(1,2)) 
> 
> # temporal variable 
> for (cn in column_names) { 
+ ret <- ddply(df, .(a), summarise, ..x=sum(b)) 
+ ret <- rename(ret, c(..x = cn)) 
+ print(ret) 
+ } 
    a total 
1 a  1 
2 b  2 
    a latot 
1 a  1 
2 b  2 
> 
> # ept solution 
> for (cn in column_names) { 
+ print(eval(parse(text = paste0("ret <- ddply(df, .(a), summarise,", cn, "=sum(b))")))) 
+ } 
    a total 
1 a  1 
2 b  2 
    a latot 
1 a  1 
2 b  2 
> 
> # dynamic generation of call 
> for (cn in column_names) { 
+ args <- alist(df, .(a), summarize, sum(b)) 
+ names(args) <- c("", "", "", cn) 
+ print(do.call("ddply", args)) 
+ } 
    a total 
1 a  1 
2 b  2 
    a latot 
1 a  1 
2 b  2 
+0

Aslında, önce eval ile birlikte gittim ve daha sonra yeniden adlandırma işleviyle değiştirdim, çünkü status veya do.call diye adlandırdığım bir patolojik nefret var. Sadece bir satırda mümkün olup olmadığını bilmek istedim. Yine de cevabınız için teşekkürler. – Blaszard

İlgili konular