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

R语言中按用户组选择action列第一个V之后的所有行

在R语言中按用户分组筛选第一个'V'出现后的所有行

需求:按user列分组,保留每个组内action列中第一个'V'出现之后的所有行(包含该行)。

示例数据

df <- read.table(text="
user   action
1        D
1        D
1        P
1        E
1        V
1        D
1        D
2        E
2        V
2        V
2        P", header=T, stringsAsFactors=F)

解决方案

方法1:使用dplyr包(tidyverse风格)

通过分组后定位第一个'V'的位置,筛选该行及后续所有行:

library(dplyr)

result <- df %>%
  group_by(user) %>%
  filter(row_number() >= which(action == 'V')[1]) %>%
  ungroup()

print(result)

方法2:使用base R

拆分数据框为分组列表,逐个处理后合并结果:

# 按user拆分数据框
df_groups <- split(df, df$user)

# 处理每个分组:筛选第一个'V'及之后的行
processed_groups <- lapply(df_groups, function(group) {
  first_v_idx <- which(group$action == 'V')[1]
  if (!is.na(first_v_idx)) {
    group[first_v_idx:nrow(group), ]
  } else {
    # 组内无'V'时返回空数据框(可按需调整)
    group[0, ]
  }
})

# 合并分组结果并重置行名
result_base <- do.call(rbind, processed_groups)
rownames(result_base) <- NULL

print(result_base)

预期输出

两种方法均会得到如下结果:

user action
1    1      V
2    1      D
3    1      D
4    2      V
5    2      V
6    2      P

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:35:24