在R中基于同一公式为各时间点批量创建新变量的实现方法
R语言宽格式时间点变量批量计算方案
这里提供两种常用的无重复代码实现方式:
1 基础R实现(无需加载第三方包)
直接提取时间点后缀批量遍历计算:
# 方法1:自动从现有列提取时间点后缀(适配任意数量时间点) time_points <- unique(gsub(".*\\.", "", grep("^b\\.[0-9]+", colnames(df), value = TRUE))) # 方法2:如果时间点范围固定,可直接指定 # time_points <- 1:4 # 批量生成新变量 for (t in time_points) { df[[paste0("a.", t)]] <- (df[[paste0("b.", t)]] + df[[paste0("c.", t)]]) / 2 }
2 tidyverse/dplyr实现(适配管道流处理逻辑)
用across跨列匹配函数实现,代码更简洁:
library(dplyr) df <- df %>% mutate( across(starts_with("b."), # 此处只需要修改公式即可自定义计算逻辑 ~ (.x + get(sub("^b\\.", "c.", cur_column()))) / 2, # 自动生成对应a.n格式的新列名 .names = "a.{.col %>% sub('^b\\.', '', .)}") )
内容的提问来源于stack exchange,提问作者Myriam
相关产品推荐
相关产品推荐

