gpt4 book ai didi

r - 根据其他列的条件标记列中连续出现的值

转载 作者:行者123 更新时间:2023-12-01 10:18:09 25 4
gpt4 key购买 nike

问题详情:我创建了一个玩具示例。每个人都有一个时间序列响应向量,指示受试者在整个时间序列中是在 sleep 、吃饭还是走路。出于本示例的目的,在“ sleep ”之后立即出现的所有连续出现的“吃”都是重要的。我有一个场景,我创建了一个计数器变量来记录向量中连续出现的相同响应。但是,我只关心保留或标记 sleep 后发生的连续“吃”次数。

在下面的代码中:我创建了一个 lag-1 变量,然后为 sleep 后的每个“吃”实例创建一个标志。然而,这只标记了每个“吃”实例的开始,我想标记所有出现在“ sleep ”之后的“吃”,以便我可以根据下面代码中的计数器变量创建汇总统计信息。

我一直在思考如何解决这个问题。

代码如下:

# load libraries
packs <- c('data.table', 'dplyr')
lapply(packs, require, character.only = TRUE)

# 1. initiate data
df <- data.frame(
id = c(rep(101, 6), rep(102, 8)),
response = c('sleep', 'sleep', 'sleep', 'eat', 'eat', 'walk', 'walk', 'sleep', 'sleep', 'eat', 'eat', 'walk', 'eat', 'walk'))

# 2. create the lag-1 variable and flag for that start of all occurrences of
df <- df %>%
mutate(lag_response = lag(response, 1),
flag = case_when(lag_response == 'sleep' & response == "eat" ~ 1)) %>%
select(id, lag_response, response, flag)

# 3. create consecutive counter for responses
df <- transform(df, counter = ave(c(response), rleid(id, c(response)), FUN = seq_along))

# 4. example of desired column
df <- df %>%
mutate(
desired_col = c(0,0,0,1,1,0,0,0,0,1,1,0,0,0))

最佳答案

我们可以通过使用 lead 比较“ sleep ”的“响应”值和下一个“吃”的值来创建“标志”,按 rleid 分组'response', mutate 'flag' 通过改变 any TRUE

library(dplyr)
library(data.table)
df %>%
mutate(flag = lag(response == 'sleep' & lead(response) == 'eat',
default = FALSE)) %>%
group_by(grp = rleid(response)) %>%
mutate(flag = +any(flag)) %>%
ungroup %>%
select(-grp)

关于r - 根据其他列的条件标记列中连续出现的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940125/

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