在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
代码细节解释
across(starts_with("yr")):指定我们要处理所有以yr开头的时间序列列str_replace(cur_column(), "yr", "type.yr"):通过当前处理的yrX列名,自动生成对应的type.yrX列名(比如把yr1转换成type.yr1)get(...):根据生成的列名,获取对应type列的数值,用于判断是否满足替换条件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
相关产品推荐
相关产品推荐

