我有一个数据框,我在其上计算特定列的运行长度编码.列的值为dir-1,0或1.
dir.rle <- rle(df$dir)
然后,我获取运行长度并计算数据帧中另一列的分段累积和.我正在使用for循环,但我觉得应该有一种更聪明地做到这一点的方法.
ndx <- 1
for(i in 1:length(dir.rle$lengths)) {
l <- dir.rle$lengths[i] - 1
s <- ndx
e <- ndx+l
tmp[s:e,]$cumval <- cumsum(df[s:e,]$val)
ndx <- e + 1
}
Run Code Online (Sandbox Code Playgroud)
为每次运行dir定义start s,和end 的运行长度e.上面的代码有效,但它不像惯用的R代码.我觉得如果没有循环,应该有另一种方法来做到这一点.
我有一个 GPS 数据的时间序列,需要根据时间戳的间隙将其分割成更小的部分。
作为一个例子,考虑下面的数据帧,我想添加一个分段号来分段时间戳的每个“块”,从而在每次时间序列中存在至少30 秒的间隙时有效地吐出数据。
生成的 data.frame 看起来像这样:
timestamp segment
1 1 1
2 3 1
3 5 1
4 10 1
5 42 2
6 45 2
7 92 3
8 156 4
9 160 4
10 162 4
11 163 4
12 164 4
13 200 5
14 203 5
Run Code Online (Sandbox Code Playgroud)
有什么方法可以有效地做到这一点吗?data.frame 是一个分组的 tbl_df(dplyr 包),具有多个不同的时间序列,并且可能非常大。
我正在尝试将几个连续的行分组(并为它们分配相同的值),同时将一些行留空(当某个条件未满足时).
我的数据是位置(xy坐标),测量它们的日期/时间以及测量之间的时间跨度.以某种方式简化,它们看起来像这样:
ID X Y Time Span
1 3445 7671 0:00 -
2 3312 7677 4:00 4
3 3309 7680 12:00 8
4 3299 7681 16:00 4
5 3243 7655 20:00 4
6 3222 7612 4:00 8
7 3260 7633 0:00 4
8 3254 7641 8:00 8
9 3230 7612 0:00 16
10 3203 7656 4:00 4
11 3202 7678 8:00 4
12 3159 7609 20:00 12
...
Run Code Online (Sandbox Code Playgroud)
我想为在4小时的时间跨度内测量的每个位置序列分配一个值,并使我的数据看起来像这样:
ID X Y Time Span Sequence
1 3445 7671 0:00 - …Run Code Online (Sandbox Code Playgroud)