我有一个包含2列的数据集,我想用它来生成第3列。它是基于时间的数据,看起来像这样:
raw_timestamp_part_2 num_window
1 788290 11
2 808298 11
3 820366 11
4 120339 12
5 196328 12
6 304277 12
7 368296 12
8 440390 12
9 28311 13
10 56286 13
我希望新列在窗口内是毫秒。因此,对于新窗口,我的新列中的值应为0,否则应该是当前时间戳与上一个时间戳之间的差异。
diff(df$raw_timestamp_part_2)
让我接近,但是在窗口中第一次观察它并没有给我0。
答案 0 :(得分:6)
dplyr
解决方案。如果数据被称为df
,那么您可以
library(dplyr)
group_by(df, num_window) %>%
mutate(newCol = c(0, diff(raw_timestamp_part_2)))
# raw_timestamp_part_2 num_window newCol
# 1 788290 11 0
# 2 808298 11 20008
# 3 820366 11 12068
# 4 120339 12 0
# 5 196328 12 75989
# 6 304277 12 107949
# 7 368296 12 64019
# 8 440390 12 72094
# 9 28311 13 0
# 10 56286 13 27975
答案 1 :(得分:4)
我喜欢使用data.table
来进行此类操作:
library(data.table)
##
dt <- data.table(df)
dt[
,delta:=c(0,diff(raw_timestamp_part_2)),
by=num_window]
##
R> dt
raw_timestamp_part_2 num_window delta
1: 788290 11 0
2: 808298 11 20008
3: 820366 11 12068
4: 120339 12 0
5: 196328 12 75989
6: 304277 12 107949
7: 368296 12 64019
8: 440390 12 72094
9: 28311 13 0
10: 56286 13 27975