按端点对ABM结果进行子集化

时间:2013-04-15 22:18:27

标签: r

这可能非常简单,但我可以使用一些帮助...我已经构建了一个基于代理的模型,它可以执行300次任意步骤,具体取决于模型中发生的事情。结果数据的结构如下:

enter image description here

我想隔离以150步或更少步骤结束的运行并完整地分析它们(不仅仅是最后一步)。 R中最好的方法是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

首先,使用aggregate获取每次运行的步数:

n_steps <- aggregate(AT6$run, by=list(run=AT6$run), FUN=length)

现在计算一个过滤变量:

n_steps <- within(n_steps, filter <- x<=150)

与原始数据合并并仅保留过滤后的运行:

AT6_f <- merge(AT6, n_steps)

AT6_f <- AT6_f[AT6_f$filter,]

最后通过运行分割data.frame:

result <- split(AT6_f, AT6_f$run)

注意:结果是一个列表,每个元素都是包含单个运行的data.frame。如果您有一个分析每次运行的函数f,您应该将上面的结果传递给它:

lapply(result, f)