Case_when dplyr
Case_when dplyr
我正在尝试创建一个 buy/sell 信号。我正在尝试使用 case_when 语句分配信号。我在上一步中使用 tidyquant TQ_MUTATE 创建了几个新列。这只会分配 "possible up" 和 "possible down" 信号。
我做错了什么?
df_with_decisions <- 测试 %>%
group_by(符号) %>%
变异(
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 ) )
问题是 &&
其中 returns 单个 TRUE/FALSE 输出而不是与输入长度相同的逻辑向量
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 ) )
也有逻辑错误
case_when(
(5 > 3) ~ "Hi",
((5 > 3) & (6 > 3)) ~ "Hello"
)
这不会打印 Hello
尽可能多地使用括号。我总是在 case_when 结束时以 TRUE 结束。 Mutate 是与 Case_when 一起的里程碑。
这是一个例子:
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"))
我正在尝试创建一个 buy/sell 信号。我正在尝试使用 case_when 语句分配信号。我在上一步中使用 tidyquant TQ_MUTATE 创建了几个新列。这只会分配 "possible up" 和 "possible down" 信号。
我做错了什么?
df_with_decisions <- 测试 %>% group_by(符号) %>% 变异(
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 ) )
问题是 &&
其中 returns 单个 TRUE/FALSE 输出而不是与输入长度相同的逻辑向量
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 ) )
也有逻辑错误
case_when(
(5 > 3) ~ "Hi",
((5 > 3) & (6 > 3)) ~ "Hello"
)
这不会打印 Hello
尽可能多地使用括号。我总是在 case_when 结束时以 TRUE 结束。 Mutate 是与 Case_when 一起的里程碑。 这是一个例子:
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"))