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

如何在R语言DataFrame中提取含error行对应的前置ID行

问题解决

首先修正你的DataFrame定义,date列的括号要改成c(),否则R会报错:

df <- data.frame(
  date = c(1,1,1,1,rep(2, 36)),
  action = c("ID=1", "foo","bah", "error",
            "ID=2", "foo","bah", "success",
            "ID=3", "foo","bah", "error",
            "ID=4", "foo","bah", "success",
            "ID=5", "foo","bah", "success",
            "ID=6", "foo","bah", "error",
            "ID=7", "foo","bah", "error",
            "ID=8", "foo","bah", "success",
            "ID=9", "foo","bah", "success",
            "ID=10", "foo","bah", "success"
            )
)

你的现有代码逻辑错误:过滤出action为error的行后,无论怎么切片,得到的都是error本身的行,而不是对应的ID行。下面提供两种可行方案:

方案一:分组筛选(dplyr)

利用每组4行的规律,先分组,再筛选出组内最后一行是error的组,取组内第一行(即ID行):

library(dplyr)

df %>%
  mutate(group_id = rep(1:(nrow(.)/4), each = 4)) %>%
  group_by(group_id) %>%
  filter(last(action) == "error") %>%
  slice(1) %>%
  ungroup() %>%
  select(date, action)

方案二:索引定位

直接找到所有error行的位置,减去3得到对应ID行的索引,再提取数据:

error_rows <- which(df$action == "error")
result <- df[error_rows - 3, c("date", "action")]

两种方案都能得到你想要的结果:

date action
1    1   ID=1
2    2   ID=3
3    2   ID=6
4    2   ID=7

内容的提问来源于stack exchange,提问作者Anthony W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:05:58