在R中使用带有for循环的ddply()函数

时间:2015-05-22 06:23:31

标签: r plyr

我的问题是关于如何在ddply循环中使用for

x<-ddply(data, "variable_name", summarize, event= sum(x)/count(x))

这是正常的ddply,但如果我希望我在variable_name的空格中,如下例所示:

**

  

数据

**  1. col1,col2,col3,col4
    a x 10 1
    a x 02 2
    a x 40 3
    b x 05 8
    b y 01 10
    b y 08 6
    b y 10 8
    b y 50 6

for(i in 1:2){ result[i]<-ddply(data, name(data[,i]), summarize, event=sum(col3)/count(col4)) }

**
  

所需的输出:

**     结果[col3]

 1. col1 event  
     a    17.33  
     b 14.80

result[col4] 

 1. col2 event  
     x    14.25  
     y    17.25

2 个答案:

答案 0 :(得分:1)

你可以随时使用这种方法(有些人可能会认为hacky):

for(i in 1:ncol(data)) {
     q <-sprintf("x <- ddply(data, .(%s), summarize, event=sum(x)/count(x))", 
              names(data)[i]) 
     parse(eval(text = q)) 
}

答案 1 :(得分:0)

sum(.) / count(.)你的意思是平均值吗?我认为summarise不适用于count。如果你只想要平均值,我建议你使用mean,你想要的就像

一样
lapply(c("cyl", "gear"), function(var) ddply(mtcars, var, summarize, mean(mpg)))
#[[1]]
#  cyl      ..1
#1   4 26.66364
#2   6 19.74286
#3   8 15.10000
#
#[[2]]
#  gear      ..1
#1    3 16.10667
#2    4 24.53333
#3    5 21.38000

或等效地,如果您想使用names和索引,可以用

替换第一个参数
lapply(names(mtcars)[c(2,10)], ...)