gpt4 book ai didi

r - 找到第一个序列剧集

转载 作者:行者123 更新时间:2023-12-02 05:40:48 24 4
gpt4 key购买 nike

我正在尝试创建一个指示序列结尾的向量。

我的数据看起来是这样的:

   id time   var wake
1 1 1 sleep 0
2 1 2 sleep 0
3 1 3 sleep 0
4 1 4 0 0
5 1 5 0 0

我想要的是这个(想要的输出)

   id time   var wake
1 1 1 sleep 0
2 1 2 sleep 0
3 1 3 sleep 0
4 1 4 0 1
5 1 5 0 0
6 1 6 0 0
7 1 7 0 0
8 1 8 sleep 0
9 1 9 sleep 0
10 1 10 sleep 0
11 2 1 sleep 0
12 2 2 sleep 0
13 2 3 sleep 0
14 2 4 sleep 0
15 2 5 sleep 0
16 2 6 0 1
17 2 7 0 0
18 2 8 0 0
19 2 9 sleep 0
20 2 10 sleep 0

我在想类似的东西

library(dplyr) 

dt$time = as.numeric(as.character(dt$time))
dt$var = ifelse(dt$var == 'sleep', 1, 0)

dt = dt %>% group_by(id) %>%
mutate(grp = cumsum(var != lag(var, default = var[1])))

dt$wake = 0
dt$wake [dt$grp == 1] <- 1

但是,它并不仅仅发现第一集

数据

dt = structure(list(id = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1",
"2"), class = "factor"), time = structure(c(1L, 3L, 4L, 5L, 6L,
7L, 8L, 9L, 10L, 2L, 1L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 2L), .Label = c("1",
"10", "2", "3", "4", "5", "6", "7", "8", "9"), class = "factor"),
var = structure(c(2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L), .Label = c("0",
"sleep"), class = "factor")), .Names = c("id", "time", "var"
), row.names = c(NA, -20L), class = "data.frame")

最佳答案

在库 data.table 的一次传递中:

setDT(dt)
dt[,wake:=( c(0,diff( rleid(var) ) == 1) & var != "sleep"),by=id]

思路是获取var(rleid)的游程编码:

> dt[,rleid(var),by=id][,V1]
[1] 1 1 1 2 2 2 2 3 3 3 1 1 1 1 1 2 2 2 3 3

从 sleep 到 0 或从 0 到 sleep 时差异为 +1,更改组时为负(从 1 重新开始):

> diff(dt[,rleid(var),by=id][,V1])
[1] 0 0 1 0 0 0 1 0 0 -2 0 0 0 0 1 0 0 1 0

在它为 1 且 var 不是 sleep 的地方得到一个 TRUE 值(如果你将整个东西包装到 as.numeric 中,则可能是 1)。

输出:

    nrow id time   var  wake
1: 1 1 1 sleep FALSE
2: 2 1 2 sleep FALSE
3: 3 1 3 sleep FALSE
4: 4 1 4 0 TRUE
5: 5 1 5 0 FALSE
6: 6 1 6 0 FALSE
7: 7 1 7 0 FALSE
8: 8 1 8 sleep FALSE
9: 9 1 9 sleep FALSE
10: 10 1 10 sleep FALSE
11: 11 2 1 sleep FALSE
12: 12 2 2 sleep FALSE
13: 13 2 3 sleep FALSE
14: 14 2 4 sleep FALSE
15: 15 2 5 sleep FALSE
16: 16 2 6 0 TRUE
17: 17 2 7 0 FALSE
18: 18 2 8 0 FALSE
19: 19 2 9 sleep FALSE
20: 20 2 10 sleep FALSE

关于r - 找到第一个序列剧集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40846038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com