如何在 R 中的 xts 对象的所有列上执行 If-Then 逻辑

问题描述 投票:0回答:1

我在 R 中有一个包含多列的 xts 对象,我想将所有大于 0.05 的数字转换为 NA(或 -99 或类似的值)。

要获取一些要执行的数据,请执行以下操作。

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
#Returns
Max90 <- rollmax(Returns, 90)
Max90 <- na.omit(Max90)

所以现在我想将对象 Max90 的所有五列中任何大于 0.05 的值调整为 NA。我已经在谷歌上搜索了几个小时,但我认为这太简单了,没有一个很好的例子。

非常感谢您的帮助。

我在堆栈溢出上尝试了一些示例代码的修改,但我无法让它们工作。

我希望任何大于 0.05 的数字都会被修改。

r if-statement xts
1个回答
0
投票

您可以使用

apply
循环浏览各列:

> Max90_NA <- apply(Max90, 2, function(x) ifelse(x>0.05 , NA, x))
> head(Max90_NA)
                 AAPL        BAC       MSFT GOOGL       SWKS
2023-08-07 0.02310252 0.04421772 0.03979977    NA 0.03590555
2023-08-08 0.02310252 0.04421772 0.03979977    NA 0.03590555
2023-08-09 0.02310252 0.04421772 0.03979977    NA 0.03590555
2023-08-10 0.02310252 0.04421772 0.03979977    NA 0.03590555
2023-08-11 0.02310252 0.04421772 0.03979977    NA 0.03590555
2023-08-14 0.02310252 0.04421772 0.03979977    NA 0.03590555
© www.soinside.com 2019 - 2024. All rights reserved.