R语言如何在列下一行匹配指定值时创建新变量A_row_error
R语言实现方案
你可以使用dplyr包的lead()函数完成需求,完整可运行代码如下:
library(dplyr) # 构造示例数据集 participant_id <- c("ps1", "ps1", "ps1", "ps1", "ps2", "ps2", "ps3", "ps3", "ps3", "ps3") timestamp <- c(0.01, 0.02, 0.03, 0.04, 0.01, 0.02, 0.01, 0.02, 0.03, 0.04) event <- c("A", "A", "A", "B", "B", "A", "A", "A", "B", "A") first_A_row <- c("TRUE", "FALSE", "FALSE", "FALSE", "FALSE", "TRUE", "TRUE", "FALSE", "FALSE", "FALSE") message <- c("ACCEPTED", "ERROR", "DECLINED", "ACCEPTED", "HELLO", "BYE", "ACCEPTED", "BYE", "ERROR", "ACCEPTED") df <- data.frame(participant_id, timestamp, event, first_A_row, message) # 计算目标变量A_row_error df_result <- df %>% # 将字符串格式的first_A_row转为逻辑型 mutate(first_A_row = as.logical(first_A_row)) %>% # 按参与者分组,避免跨参与者取行 group_by(participant_id) %>% # 按时间戳升序排序,保证行顺序符合要求 arrange(timestamp, .by_group = TRUE) %>% # 取当前行下一行的message值,无下一行时默认返回空字符串 mutate(next_msg = lead(message, default = "")) %>% # 按规则赋值A_row_error mutate(A_row_error = ifelse(first_A_row == TRUE & next_msg == "ERROR", TRUE, FALSE)) %>% # 删除辅助列、取消分组 select(-next_msg) %>% ungroup()
运行上述代码后得到的df_result完全符合你给出的预期输出结果。
内容的提问来源于stack exchange,提问作者elmolibra
相关产品推荐
相关产品推荐

