首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Case_when dplyr

Case_when dplyr
EN

Stack Overflow用户
提问于 2020-05-28 19:01:01
回答 3查看 414关注 0票数 0

我正试图制造一个买卖信号。我试图使用case_when语句分配信号。在前面的步骤中,我使用tidyquant TQ_MUTATE创建了几个新列。这只分配“可能向上”和“可能下降”的信号。

我做错了什么?

df_with_decisions <-测试%>% group_by(符号) %>%变异(

代码语言:javascript
复制
signal = case_when(
   (EMA_9 > EMA_55) ~ "possible up",
  (EMA_9 > EMA_55 && EVWMA_9 > EMA_55) ~ "watch upward",
  (EMA_9 > EMA_55 && EMA_21 >= EMA_55 && EVWMA_9 > EMA_55) ~ "buy",
  (EMA_9 > EMA_55 && EMA_21 >= EMA_55 && EVWMA_9 > EMA_55 && EVWMA_21 > EMA_55) ~ "strong_buy",
  EMA_9 < EMA_55 ~ "possible down",
  (EMA_9 < EMA_55 && EVWMA_9 < EMA_55) ~ "watch downward",
  (EMA_9 < EMA_55 && EMA_21 <= EMA_55 && EVWMA_9 < EMA_55) ~ "sell",
  (EMA_9 < EMA_55 && EMA_21 <= EMA_55 && EVWMA_9 < EMA_55 && EVWMA_21 < EMA_55) ~ "strong_sell",
  ),

previous_signal = lag(signal, 1),

decision = case_when(
  signal == previous_signal ~ "hold",
  TRUE ~ signal    )  )
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-28 19:11:52

逻辑错误也是。

代码语言:javascript
复制
case_when(
  (5 > 3) ~ "Hi",
  ((5 > 3) & (6 > 3)) ~ "Hello"
)

这将不会打印Hello

票数 0
EN

Stack Overflow用户

发布于 2020-05-28 19:07:19

问题是,&&返回一个真/假输出,而不是输入长度相同的逻辑向量。

代码语言:javascript
复制
test %>%
     group_by(symbol) %>%
     mutate(

signal = case_when(
   (EMA_9 > EMA_55) ~ "possible up",
  (EMA_9 > EMA_55 & EVWMA_9 > EMA_55) ~ "watch upward",
  (EMA_9 > EMA_55 & EMA_21 >= EMA_55 & EVWMA_9 > EMA_55) ~ "buy",
  (EMA_9 > EMA_55 & EMA_21 >= EMA_55 & EVWMA_9 > EMA_55 & EVWMA_21 > EMA_55) ~ "strong_buy",
  EMA_9 < EMA_55 ~ "possible down",
  (EMA_9 < EMA_55 & EVWMA_9 < EMA_55) ~ "watch downward",
  (EMA_9 < EMA_55 & EMA_21 <= EMA_55 & EVWMA_9 < EMA_55) ~ "sell",
  (EMA_9 < EMA_55 && EMA_21 <= EMA_55 & EVWMA_9 < EMA_55 & EVWMA_21 < EMA_55) ~ "strong_sell",
  ),

previous_signal = lag(signal, 1),

decision = case_when(
  signal == previous_signal ~ "hold",
  TRUE ~ signal    )  )
票数 1
EN

Stack Overflow用户

发布于 2021-12-13 17:45:59

尽量使用括号,因为你认为它是有帮助的。在case_when结尾时,我总是以TRUE结尾。与Case_when一起,变异是一个里程碑。这就是一个例子:

代码语言:javascript
复制
mutate(Intensidad_guerra = case_when(
     (MD_P2_filt$battle_type %in% c("pitched battle") | MD_P2_filt$battle_type %in% c("siege")) ~ "nivel alto",
                                  MD_P2_filt$battle_type %in% c("ambush")  ~"nivel medio",
                                  TRUE ~ "nivel bajo")) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62072522

复制
相关文章

相似问题

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