用特定列的条件替换值
Replace values with conditions over specific columns
我尝试将其自动化并四处搜索,但没有结果。我从雅虎财经下载了以下数据。
require(quantmod)
tickers <- c("SPY")
start <- "2020-01-01"
end <- "2020-06-01"
getSymbols(tickers,
from = start,
to = end,
env = globalenv())
现在,如果 index(data)
在“2020-05-01”之前,我想替换 SPY$open
、SPY$close
、... 中的所有值。我尝试使用 xts
格式,但我做不到,所以我决定通过以下方式将其转换为 data.frame:
data = SPY # I create this so I can scale up the code for not only SPY.
data$day <- as.Date(data$day) # format day.
colnames(data) <- c("day", "open", "high", "low", "close", "volume", "adjusted_price")
to_replace <- c("day", "open", "high", "low", "close", "volume", "adjusted_price")
现在,我可以运行为一列编写以下代码
data$open <- ifelse(data$day < as.Date("2020-05-01"), data$open/100, data$open)
如何为 to_replace
中命名的所有列制作自动代码 运行。我尝试创建一个函数并像这样应用 lapply
但它没有用。
replace <- function(x) {
x <- ifelse(data$day > as.Date("2020-05-1"), x/100, x)
return(x)
}
lappy(tickers, replace)
总的来说,我有两个问题。
- 我们如何 运行 在某些条件下对多个列的值进行函数处理?
- 我们可以在 xts 帧而不是数据帧中完成所有这些吗?
您可以尝试使用 dplyr 1.0.0
中的 across
:
library(dplyr)
data <- data.frame(date=index(SPY), coredata(SPY))
colnames(data) <- c("day", "open", "high", "low", "close", "volume", "adjusted_price")
to_replace <- c("open", "high", "low", "close", "volume", "adjusted_price")
data <- data %>%
mutate(across(to_replace, ~ if_else(day > as.Date("2020-05-1"), . / 100, .)))
我尝试将其自动化并四处搜索,但没有结果。我从雅虎财经下载了以下数据。
require(quantmod)
tickers <- c("SPY")
start <- "2020-01-01"
end <- "2020-06-01"
getSymbols(tickers,
from = start,
to = end,
env = globalenv())
现在,如果 index(data)
在“2020-05-01”之前,我想替换 SPY$open
、SPY$close
、... 中的所有值。我尝试使用 xts
格式,但我做不到,所以我决定通过以下方式将其转换为 data.frame:
data = SPY # I create this so I can scale up the code for not only SPY.
data$day <- as.Date(data$day) # format day.
colnames(data) <- c("day", "open", "high", "low", "close", "volume", "adjusted_price")
to_replace <- c("day", "open", "high", "low", "close", "volume", "adjusted_price")
现在,我可以运行为一列编写以下代码
data$open <- ifelse(data$day < as.Date("2020-05-01"), data$open/100, data$open)
如何为 to_replace
中命名的所有列制作自动代码 运行。我尝试创建一个函数并像这样应用 lapply
但它没有用。
replace <- function(x) {
x <- ifelse(data$day > as.Date("2020-05-1"), x/100, x)
return(x)
}
lappy(tickers, replace)
总的来说,我有两个问题。
- 我们如何 运行 在某些条件下对多个列的值进行函数处理?
- 我们可以在 xts 帧而不是数据帧中完成所有这些吗?
您可以尝试使用 dplyr 1.0.0
中的 across
:
library(dplyr)
data <- data.frame(date=index(SPY), coredata(SPY))
colnames(data) <- c("day", "open", "high", "low", "close", "volume", "adjusted_price")
to_replace <- c("open", "high", "low", "close", "volume", "adjusted_price")
data <- data %>%
mutate(across(to_replace, ~ if_else(day > as.Date("2020-05-1"), . / 100, .)))