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

如何用R的dplyr包mutate/across生成首个大于date的entry列

用dplyr实现提取首个大于date的t列值

完整解决方案代码

library(dplyr)
library(purrr)

# 原数据集
df <- data.frame("id" = c(1,2,3,4), "date" = c(4,8,2,5), 
                 "t_1" = c(NA,9,NA,4), "t_2" = c(NA,10,NA,5),
                 "t_3" = c(NA,12,NA,6),"t_4" = c(NA,16,NA,8))

# 生成entry列的处理逻辑
df <- df %>%
  rowwise() %>%
  mutate(entry = {
    # 提取当前行所有t_开头的列值
    t_values <- c_across(starts_with("t_"))
    # 筛选大于date的元素,取第一个;无符合值则返回NA
    first(t_values[t_values > date], default = NA)
  }) %>%
  ungroup()

关键步骤解释

  • rowwise():将数据框转为按行分组,确保后续操作逐行独立执行
  • c_across(starts_with("t_")):动态提取所有以t_开头的列,生成每行的t值向量,适配任意数量的t_x列
  • first(t_values[t_values > date], default = NA):筛选出大于当前行date的t值,取第一个符合条件的结果;如果所有t值≤date或全为NA,则返回NA
  • ungroup():取消行分组,恢复数据框默认状态,避免影响后续操作

结果验证

运行代码后,df的entry列将与期望结果完全一致:c(NA,9,NA,6),符合题目要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:07:42