【发布时间】:2011-08-17 22:50:10
【问题描述】:
我正在使用 ddply 来聚合和汇总数据框变量,并且我有兴趣遍历我的数据框列表以创建新变量。
new.data <- ddply(old.data,
c("factor", "factor2"),
function(df)
c(a11_a10 = CustomFunction(df$a11_a10),
a12_a11 = CustomFunction(df$a12_a11),
a13_a12 = CustomFunction(df$a13_a12),
...
...
...))
有没有办法让我在 ddply 中插入一个循环,这样我就可以避免写出每个新的汇总变量,例如
for (i in 11:n) {
paste("a", i, "_a", i - 1) = CustomFunction(..... )
}
我知道这不是它的实际实现方式,但我只是想展示我将如何概念化它。有没有办法在我在 ddply 中调用的函数中或通过列表来执行此操作?
更新:因为我是新用户,所以我无法发布自己的问题的答案:
我的回答涉及 Nick 的回答和 Ista 的评论中的想法:
func <- function(old.data, min, max, gap) {
varrange <- min:max
usenames <- paste("a", varrange, "_a", varrange - gap, sep="")
new.data <- ddply(old.data,
.(factor, factor2),
colwise(CustomFunction, c(usenames)))
}
【问题讨论】:
-
您可能在关注
transform()或summarize()。summarize的帮助页面展示了一些很好的例子。 -
@Chase - Re: 总结,我可以用(old.data, summarise(old.data[, paste("a", i, "_a") 为 (i in 11:n) 做, i - 1, sep="")], llist(factor, factor2), CustomFunction))
-
如果您使您的示例可重现,那么您的潜在帮助者会更轻松。在没有工作示例的情况下,我只能猜测您正在寻找
?colwise(请参阅与 ddply 一起使用的示例)。 -
@Ista - 谢谢,在得知尼克最初将变量名加载到内存中之后,colwise 正是我想要的。
-
+1 @Casey。非常优雅。