首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dplyr/tidyquant xts中的简单ifelse语句

dplyr/tidyquant xts中的简单ifelse语句
EN

Stack Overflow用户
提问于 2018-12-08 13:56:08
回答 1查看 339关注 0票数 1

我正在尝试使用tidyquantdplyr创建一个简单的dplyr语句。

我现在拥有的是;

代码语言:javascript
复制
from <- "2017-07-09"
to <- "2018-12-01"
getSymbols("GOOG", from = from, to = to, src = "yahoo", adjust = TRUE)

colnames(GOOG) <- c("Open", "High", "Low", "Close", "Volume", "Adjusted")

library(dplyr)
library(tidyquant)

GOOG %>%
  mutate(Direction = ifelse(Close < Open, 1, 0))

返回一个错误:

代码语言:javascript
复制
Error in UseMethod("mutate_") : 
  no applicable method for 'mutate_' applied to an object of class "c('xts', 'zoo')"

我知道tidyquant包可以在xts数据上使用dplyr函数,所以我也试图使用tidyquant来解决这个问题。

以下操作有效,但将数据从xts格式中删除。

代码语言:javascript
复制
x <- GOOG %>%
  data.frame() %>%
  mutate(Direction = ifelse(Close < Open, 1, 0))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-08 14:03:41

这里的问题不在于ifelse。它是关于mutate和事实

代码语言:javascript
复制
class(GOOG)
# [1] "xts" "zoo"

在这种情况下,您实际上不会从mutate获得任何东西,所以您可以只使用

代码语言:javascript
复制
GOOG$Direction <- with(GOOG, ifelse(Close < Open, 1, 0))

但是,您也可以在tidyquant中使用quantmod而不是getSymbols

代码语言:javascript
复制
GOOG <- tq_get("GOOG", from = from, to = to)
GOOG %>% mutate(Direction = ifelse(close < open, 1, 0))
# A tibble: 354 x 8
#   date        open  high   low close  volume adjusted Direction
#   <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>     <dbl>
# 1 2017-07-10  922.  930.  920.  929. 1192800     929.         0
# 2 2017-07-11  930.  931.  922   930. 1113200     930.         0
# 3 2017-07-12  939.  946.  934.  944. 1532100     944.         0
# ... with 351 more rows

这起作用是因为

代码语言:javascript
复制
class(GOOG)
# [1] "tbl_df"     "tbl"        "data.frame"

另一种选择是继续使用quantmod,但用transform代替mutate

代码语言:javascript
复制
GOOG %>% transform(Direction = ifelse(Close < Open, 1, 0))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53683228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档