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

如何用R语言tidyverse包检查分组数据的前序S观测值是否存在

解决方案

问题分析

你需要按N分组后,检查每条记录的S值是否存在前序值(即S-1的数值是否在当前分组的S集合中)。注意原数据中S是字符类型,需先转换为数值再运算。

完整代码实现

library(tidyverse)

# 你的数据集
df <- structure(list(N = c("a", "b", "c", "a", "b", "a", "b", "c", 
"a", "c"), S = c("4", "4", "4", "3", "3", "2", "2", "2", "1", 
"1")), class = "data.frame", row.names = c(NA, -10L))

# 管道实现逻辑
df %>%
  group_by(N) %>%
  arrange(desc(S)) %>% # 按S降序排列,匹配期望输出顺序
  mutate(P = (as.numeric(S) - 1) %in% as.numeric(S)) %>%
  ungroup()

代码说明

  1. 分组与排序:按N分组后,用arrange(desc(S))保证输出顺序和你期望的一致;
  2. 逻辑判断:(as.numeric(S) - 1) %in% as.numeric(S)的作用是:将当前行的S转为数值并减1,检查该值是否存在于当前分组的所有S数值中,返回TRUE/FALSE;
  3. 取消分组:最后用ungroup()取消分组,避免后续操作受分组状态影响。

输出结果

运行代码后会得到你期望的表格:

NSP
a4TRUE
b4TRUE
c4FALSE
a3TRUE
b3TRUE
a2TRUE
b2FALSE
c2TRUE
a1FALSE
c1FALSE

内容的提问来源于stack exchange,提问作者C. Guff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:45:25