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

R语言使用dplyr按列名模式匹配批量计算生成新时长列方法

dplyr 实现批量计算时长差值的方法

首先确保你安装并加载了1.0.0及以上版本的dplyr包,使用across()函数可以批量匹配目标列完成计算,无需手动逐个写列名。

步骤1:构造示例数据(你本地有数据可跳过这一步)

library(dplyr)

df <- tibble(
  id = 1:4,
  start_year = c(2010, 2012, 2015, 2021),
  subj1_year = c(2001, 2002, 2003, 2004),
  subj2_year = c(2003, 2004, 2005, 2006)
)

步骤2:批量计算差值

df_result <- df %>%
  mutate(
    # 匹配所有列名含subj的列,计算和start_year的差值
    across(contains("subj"),
           ~ start_year - .x,
           # 定义新列命名规则:移除原列名的_year后缀,拼接_duration
           .names = "{stringr::str_remove(col, '_year')}_duration")
  )

参数说明

  • contains("subj"):列选择规则,匹配所有列名中包含subj字符的列,若需要严格匹配大小写可以加参数ignore.case = FALSE
  • ~ start_year - .x:匿名计算函数,.x指代每一个被选中的subj列
  • .names:新生成列的命名规则,自动替换原列名后缀后生成符合要求的新列名

运行后输出的df_result和你给出的预期结果完全一致。

如果使用的是1.0.0版本以下的dplyr,也可以用mutate_at实现:

df_result <- df %>%
  mutate_at(vars(contains("subj")),
            list(duration = ~ start_year - .x)) %>%
  # 调整列名符合要求
  rename_with(~stringr::str_remove(., "_year"), ends_with("duration"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:42:03