我的问题是关于如何在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
答案 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)], ...)