r - 循环在ddply中创建新变量

标签 r for-loop plyr

我正在使用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或通过列表调用的函数中,有没有办法做到这一点?

更新:因为我是新用户,所以无法发布自己的问题的答案:

我的答案涉及尼克的答案和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)))
}

最佳答案

以@Nick的出色答案为基础,这是解决问题的一种方法

foo <- function(df){
  names   = paste("a", 11:n, "_a", 10:(n-1), sep = "")
  results = sapply(df[,names], CustomFunction)
}

new.data = ldply(dlply(old.data, c("factor", "factor2")), foo)

这是在tips中使用ggplot2数据集的示例应用程序。假设我们要通过tiptotal_bill的组合来计算sexsmoker的平均值,这就是代码的工作方式
foo = function(df){names = c("tip", "total_bill"); sapply(df[,names], mean)}
new = ldply(dlply(tips, c("sex", "smoker")), foo)

产生如下所示的输出
         .id      tip total_bill
1  Female.No 2.773519   18.10519
2 Female.Yes 2.931515   17.97788
3    Male.No 3.113402   19.79124
4   Male.Yes 3.051167   22.28450

这是您要找的东西吗?

关于r - 循环在ddply中创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5873922/

相关文章:

r - ggsurvplot 关于置信区间的奇怪行为

r - R中基于Log-Cosh损失函数的线性回归模型

matlab - 使用 MATLAB 计算 for 循环内的多个正弦曲线,然后绘制它们

r - 使用transform和plyr在R中添加计数列

r - 在 plyr 中使用多个变量

r - 仅从 DT 导出选定的行

swift - 每次运行延迟for循环

python - 如何在 Python 中实现这两个循环?

r - 如何在不明确命名的情况下按测量变量的总和进行分组?

r - 并行 plyr 中的奇怪环境行为