【发布时间】:2015-12-11 13:26:10
【问题描述】:
我想计算一列的移动总和(填充一和零),但仅当相应列(时间)中的值在值的(移动)范围内时。
我的数据如下所示:
values <- c(1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0)
seconds <- c(0.0, 1.0, 2.5, 3.0, 5.5, 6.0, 6.5, 7.0, 8.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.5, 16.0, 17.0, 18.0, 19.0, 20.0)
data <- data.frame(values, seconds)
假设我想对“值”列中每 5 秒的数据求和。 那么我的第一个 5 秒总和(秒 >=0 和秒
1(因为它对应一个'秒',0.0,在感兴趣的区间内)
+
0(对应于“秒”中的 1.0)
+
0 (2.5)
+
0 (3.0)
= 1
在此处停止,因为下一个值 (1) 对应于 5.5 秒,在间隔之外。
接下来的 5 秒间隔(秒 >= 1 和秒
0 + 0 + 0 + 1 + 1 = 2
第三个间隔:
(秒 >= 2.5 & 秒 3
等等。
我是 R 菜鸟,所以这是我用来计算它的方法(而且它超级慢,所以我知道一定有更好的方法):
for(i in 1:20){movsum[i] <- sum(subset(data, seconds >= (seconds[i] - 5.0) & seconds <= seconds[i])$values)}
感谢您的帮助。如果有什么需要澄清的,请告诉我。
【问题讨论】:
-
哎呀。解决它。我应该提一下,底部的 movsum 循环与我手动计算的不匹配,这正是我通常的目标。