【发布时间】:2012-01-18 00:19:15
【问题描述】:
我认为这个问题尚未提出(大多数类似的问题是关于提取数据或返回计数)。我是 R 新手,因此我们将不胜感激!
我在一个文件中有一个实验多次运行的数据集,数据看起来像这样,其中我有每个运行的所有时间步长 time [info] id(每次运行唯一)
我试图计算系统何时达到平衡,我将其定义为 3 个相互依赖的参数中的稳定值。我想比较行的内容,如果它们在 20 个时间步长内彼此相差 5%,则返回稳定性开始的时间步长和 id。
到目前为止,我认为它将类似于以下内容(或者可能有一个 while 循环)(抱歉格式错误):
y=1;
z=0; #variables to control the loop
x=0;
for (ID) {
if (CC at time=x == 0.05+-CC at time=y ) {
if(z<=20){ #catalogs the number of periods that match
y++
z++}
else [save value in column]
}
else{ #no match for sustained period so start over again
x++
y=x+1
z=0
}
}
eta:CC 是我感兴趣的参数之一,范围在 0 和 1 之间,尽管端点不太可能。
这是一个可能有帮助的简单示例:这类似于我的数据的外观:
zz <- textConnection("time CC ID
1 0.99 1
2 0.80 1
3 0.90 1
4 0.91 1
5 0.92 1
6 0.91 1
1 0.99 2
2 0.90 2
3 0.90 2
4 0.91 2
5 0.92 2
6 0.91 2")
Data <- read.table(zz, header = TRUE)
close(zz)
我的问题是,我怎样才能通过这些线找出 CC 的值何时变得“稳定”(意味着它在 X(这里,3)时间步长上的变化不超过 0.05),以便它将产生以下结果:
ID timeToEQ
1 1 3
2 2 2
这有帮助吗?我能想到的唯一方法是使用 for 循环,我认为 必须 是一种更简单的方法!
【问题讨论】:
-
参数是否有可能为 0(这会使 5% 以内的要求相当严格)?
-
有一个非零的机会,但不太可能。我玩弄了 eq 的不同定义,但在我弄清楚如何计算它之前,我被卡住了
-
也许您可以包含一个可重现的小示例 (stackoverflow.com/questions/5963269/…) 并向我们展示您目前的成果?
-
我添加了更多解释,希望对您有所帮助。谢谢你的链接——这是我第一次在这里发帖。
-
你看过zoo包里的
rollapply了吗?