You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:27:00