-1

我正在尝试根据值列将一些杂乱的时间序列数据组合在一起 - 本质上我正在尝试创建一个生成该列的函数targetid- 也就是说,数据集按 分组id,并且每当 a非零值再次开始。

a <-  data.frame(
  id=rep(1:2,each=8,times=1),
  valuecolumn = c(5,5,10,0,0,0,5,0,5,5,0,5,10,0,0,0),
  targetid = c(1,1,1,1,1,1,2,2,1,1,1,2,2,2,2,2)
)

这个答案可能是我能找到的最接近的答案(不起作用,因为 id 会重置每个非零值。

4

1 回答 1

0

以为我会回答我相当具体的问题:

library(dplyr)
a2 <- a %>%
  group_by(id) %>%
  mutate(next.valuecolumn = lag(valuecolumn),
         next.valuecolumn2 = coalesce(next.valuecolumn, valuecolumn),
         diff = ifelse(valuecolumn > 0 & next.valuecolumn2 == 0, 1, 0),
         target2 = cumsum(diff)+1)

行 id 不会“重置”,但这不是问题所必需的,因为我可以按 user_id-target 分组以按 id 对值求和。

于 2019-02-11T19:25:14.070 回答