Bla*_*ard 5 variables r columnname plyr
有没有办法将变量的值赋给plyr中的结果列名?所以在这段代码中......
column_name <- 'total'
df <- data.frame(a=c('a','b'), b=c(1,2))
ddply(df, .(a), summarise, column_name=sum(b))
Run Code Online (Sandbox Code Playgroud)
如您所知,这会吐出一个由变量a
和数据组成的数据框column_name
.不过,我想这是变量a
和total
,其中total
由一个变量的值动态分配的,因为实际上,我要处理它在循环中,我不能直接指定它ddply函数内.
对于您的信息,此代码不起作用.
ddply(df, .(a), summarise, get(column_name)=sum(b))
Run Code Online (Sandbox Code Playgroud)
那么有没有解决方案呢?
有几种方法:
> 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
Run Code Online (Sandbox Code Playgroud)