在 ddply 中抓取一个或多个进行处理很容易,但是有没有办法抓取整个当前行并将其传递给函数?或者抓取一组在运行时确定的列?
让我举例说明:
给定一个像
df = data.frame(a=seq(1,20), b=seq(1,5), c= seq(5,1))
df
a b c
1 1 1 5
2 2 2 4
3 3 3 3
我可以编写一个函数来对沿数据框的一行的命名列求和,如下所示:
selectiveSummer = function(row,colsToSum) {
return(sum(row[,colsToSum]))
}
当我这样调用它时它会起作用:
> selectiveSummer(df[1,],c('a','c'))
[1] 6
所以我想把它包装在一个匿名函数中,并在 ddply 中使用它来将它应用到表中的每一行,就像下面的例子
f = function(x) { selectiveSummer(x,c('a','c')) }
#this doesn't work!
ddply(df,.(a,b,c), transform, foo=f(row))
我想找到一个解决方案,其中可以在运行时确定要操作的列集,所以如果有某种方法可以从 ddply 的 args 中删除它并将其传递给一个接受任意数量的 args 的函数,那也可以。
编辑:需要明确的是,驱动这个的真正应用程序不是总和,但这是一个更简单的解释