【发布时间】:2017-03-25 01:30:33
【问题描述】:
我正在尝试创建一个数据框,其中存在一个包含表示正数和负数运行长度的值的列,如下所示:
Time V Length
0.5 -2 1.5
1.0 -1 1.5
1.5 0 0.0
2.0 2 1.0
2.5 0 0.0
3.0 1 1.75
3.5 2 1.75
4.0 1 1.75
4.5 -1 0.75
5.0 -3 0.75
Length 列对值为正数或负数的时间长度求和。零被赋予0,因为它们是一个拐点。如果没有零分隔符号变化,则在拐点的任一侧对值进行平均。
我正在尝试估算这些值花费正数或负数的时间量。我用for 循环尝试了这个,取得了不同程度的成功,但我想避免循环,因为我正在处理非常大的数据集。
我花了一些时间查看sign 和diff,因为它们在this question about sign changes 中使用。我还查看了使用transform 和aggregate 对连续重复值求和的this question。我觉得我可以将它与sign 和/或diff 结合使用,但我不确定如何将这些总和追溯分配给创建它们的范围或如何处理我正在使用的位置整个拐点的平均值。
任何建议将不胜感激。这是示例数据集:
dat <- data.frame(Time = seq(0.5, 5, 0.5), V = c(-2, -1, 0, 2, 0, 1, 2, 1, -1, -3))
【问题讨论】:
-
你能给你发布的数据集提供解决方案吗?!
-
@David 我相信
Length列是发布数据集的解决方案。 -
@David:我根据我列出的规则“手工”制作了该数据集;这是我希望最终解决方案看起来的样子,但由于样本量有数十万,我无法手动完成整个工作。
-
我说对了吗:1.5(第 1 行和第 2 行)是 sum(Time[c(0,1)])?那么 0 因为 V[3] == 0?但是为什么我们得到 1 而不是 2 (Time[4])?
-
@David,没有第 1 行和第 2 行不是 1.5,因为它是前两次的总和,它是 V 为负数直到 V 为 0 的持续时间(从 Time = 0 开始)。一切是 0 之间的差异。如果您查看
plot(dat$Time, dat$V, type = "l")OP 想要 0 之间的 x 距离。
标签: r transform aggregate diff sign