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

在R语言中基于同row对应时间序列类型列的条件替换时间序列数据值

解决时间序列列基于对应类型列的替换问题

首先,你的需求核心是将每个yrX列的值,根据同序号的type.yrX列的判断结果,决定是否替换为mixed.rate的值。你原来的代码存在几个小问题:语法不完整(括号未闭合)、across的逻辑没有正确关联yr和对应的type列,我们来一步步修正。

核心思路

我们可以针对所有以yr开头的列进行遍历,对于每个yrX列,找到对应的type.yrX列,判断该列的值是否为"mixed":

  • 如果是,就用当前行的mixed.rate值替换yrX的内容
  • 如果不是,保留yrX原来的值

修正后的代码

library(dplyr)
library(stringr)

# 构造原始数据集
product<-c("01","02")
yr1<-c("1","7")
yr2<-c("3","4")
type.yr1<-c("mixed","number")
type.yr2<-c("number","mixed")
mixed.rate<-c("1+5GBP","7+3GBP")
df<-data.frame(product,yr1,yr2,type.yr1,type.yr2,mixed.rate)

# 核心处理逻辑
df_processed <- df %>%
  mutate(across(starts_with("yr"), 
                ~ifelse(get(str_replace(cur_column(), "yr", "type.yr")) == "mixed", 
                        mixed.rate, 
                        .x)))

# 查看最终结果
df_processed

代码细节解释

  1. across(starts_with("yr")):指定我们要处理所有以yr开头的时间序列列
  2. str_replace(cur_column(), "yr", "type.yr"):通过当前处理的yrX列名,自动生成对应的type.yrX列名(比如把yr1转换成type.yr1)
  3. get(...):根据生成的列名,获取对应type列的数值,用于判断是否满足替换条件
  4. ifelse分支:满足type列为"mixed"时,用mixed.rate替换原yrX值,否则保留原始内容

验证结果

运行代码后,得到的df_processed完全符合你的预期:

> df_processed
  product      yr1      yr2 type.yr1 type.yr2 mixed.rate
1      01 1+5GBP        3    mixed   number   1+5GBP
2      02       7 7+3GBP   number    mixed   7+3GBP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:52:34