如何在R中对xts对象所有列将大于0.05的值替换为NA?
替换xts对象中大于阈值的值
先修正测试代码的语法问题
你提供的测试代码里有一处语法错误,map(Ad) %> %reduce 应该改为 map(Ad) %>% reduce(merge.xts),修正后的完整测试代码:
library(purrr); library(quantmod) GetMySymbols <- function(x) { getSymbols(x, src="yahoo", from='2023-06-01', to='2024-04-01', auto.assign=FALSE) } tickers <- c('AAPL','BAC','MSFT','GOOGL','SWKS') Prices <- map(tickers, GetMySymbols) Prices <- Prices %>% map(Ad) %>% reduce(merge.xts) names(Prices) <- tickers Returns <- diff(Prices, 1, arith=FALSE)-1 Max90 <- rollmax(Returns, 90) Max90 <- na.omit(Max90)
核心替换方法
xts对象本质是带时间索引的矩阵,直接用逻辑索引就能批量替换所有符合条件的值,无需循环处理每一列:
# 将所有大于0.05的数值替换为NA Max90[Max90 > 0.05] <- NA # 如果需要替换为-99之类的其他值,只需修改右侧赋值: # Max90[Max90 > 0.05] <- -99
验证替换效果
可以用以下代码确认替换是否生效:
# 检查是否还存在大于0.05的值(结果应为0) sum(Max90 > 0.05, na.rm = TRUE) # 查看替换后的前几行数据 head(Max90)
内容的提问来源于stack exchange,提问作者JohnS
相关产品推荐
相关产品推荐

