【问题标题】:Replace values with conditions over specific columns用特定列上的条件替换值
【发布时间】:2020-10-19 12:36:21
【问题描述】:

我已尝试将其自动化并四处搜索,但没有结果。我从雅虎财经下载了以下数据。

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$openSPY$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)

总的来说,我有两个问题。

  1. 我们如何在某些条件下对多列的值运行函数?
  2. 我们可以在 xts 框架而不是数据框架内完成所有这些操作吗?

【问题讨论】:

    标签: r replace multiple-columns


    【解决方案1】:

    您可以尝试使用来自dplyr 1.0.0across

    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, .)))
    
    

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 2018-12-24
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多