如何分配变量';在plyr中,列名称的值是多少?

如何分配变量';在plyr中,列名称的值是多少?,r,variables,plyr,columnname,R,Variables,Plyr,Columnname,有没有办法将变量的值分配给plyr中的结果列名? 所以在这段代码中 column_name <- 'total' df <- data.frame(a=c('a','b'), b=c(1,2)) ddply(df, .(a), summarise, column_name=sum(b)) 那么有什么解决办法吗?有几种方法: > column_names <- c('total', 'latot') > df <- data.frame(a=c('a','b'

有没有办法将变量的值分配给plyr中的结果列名? 所以在这段代码中

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

那么有什么解决办法吗?

有几种方法:

> 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
>列名称
>#时间变量
>对于(列名称中的cn){
+ret#ept解决方案
>对于(列名称中的cn){

+print(eval)(parse(text=paste0)(“ret可能有助于为您指明方向。实际上,我首先使用eval,后来用rename函数替换它,因为我讨厌调用eval或do.call。我只是想知道它在一行中是否可行。不过感谢您的回复。
> 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