R中的常见用例(至少对我而言)是在数据框中标识具有某些取决于某些子集中的值的特征的观察值的其他观察。R中针对“自然”过程问题的有效函数编程(使用mapply)
为了使这更沈志南,假设我有一批工人(由WorkerId索引)是 具有相应的“迭代”:
raw <- data.frame(WorkerId=c(1,1,1,1,2,2,2,2,3,3,3,3),
Iteration = c(1,2,3,4,1,2,3,4,1,2,3,4))
,我想最终子集的数据帧排除“最后”迭代(通过为每个工作者创建一个“删除”布尔值)。我可以写一个函数来做到这一点:
raw$remove <- mapply(function(wid,iter){
iter==max(raw$Iteration[raw$WorkerId==wid])},
raw$WorkerId, raw$Iteration)
> raw$remove
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE
但得到的数据帧变大很慢(大概是因为我不必要计算最大为每个观察)。
我的问题是在函数式编程风格中做到这一点的更高效(和惯用)的方式是什么。它是首先创建一个WorkerId到最大值字典,然后将其用作另一个对每个观察操作的函数的参数?
你的例子是由另一个R-覆盖问题:[为指定字段提取具有MAX值的数据帧行的索引](http://stackoverflow.com/q/60 168747分之25051)。 – Marek 2011-05-29 23:08:36