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

如何用R语言检测存在order变量随时间递减的个体

检测数据集中order变量随时间递减的个体

数据集

首先是你的数据集定义:

ID<-c(1,1,1,1,
      2,2,2,
      3,3,
      4,4,4,4)

order<-c(44,44,45,41,
        13,21,2013,
        21,10,
        45,65,74,877)

mydata<-data.frame(
  ID=ID,order=order
)

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

适合习惯tidyverse语法的用户,步骤清晰直观:

library(dplyr)

# 为每个ID生成随访时间变量Time(对应行的顺序)
mydata <- mydata %>% 
  group_by(ID) %>% 
  mutate(Time = row_number()) %>% 
  ungroup()

# 筛选存在order递减的ID
decreasing_ids <- mydata %>%
  group_by(ID) %>%
  # 计算当前order与上一个时间点的差值
  mutate(order_diff = order - lag(order)) %>%
  # 组内只要有一次差值小于0,就标记为需要筛选的ID
  filter(any(order_diff < 0, na.rm = TRUE)) %>%
  distinct(ID) %>%
  pull(ID)

# 查看结果
decreasing_ids

运行后输出:[1] 1 3,符合预期。

方法二:使用Base R

无需加载额外包,用原生R代码即可实现:

# 按ID拆分order数据
id_order_groups <- split(mydata$order, mydata$ID)

# 遍历每个组,检查是否存在相邻order递减的情况
decreasing_ids <- names(id_order_groups)[sapply(id_order_groups, function(x) {
  # diff(x)得到相邻元素的差值,只要有一个差值小于0就返回TRUE
  any(diff(x) < 0)
})]

# 转换为数值型ID
decreasing_ids <- as.numeric(decreasing_ids)

# 查看结果
decreasing_ids

运行后同样输出:[1] 1 3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:22:41