gpt4 book ai didi

R根据两个不同的参数创建多个列

转载 作者:行者123 更新时间:2023-12-04 10:07:51 26 4
gpt4 key购买 nike

我有一个数据框,它有 2 列:日期和返回。现在我想改变多个新列,这取决于两个参数:阈值参数和滞后参数。功能很简单。新列计算如下:

var= ifelse(lag(return, n= lag_day)>threshold,return, NA))

如果 lag(return)高于阈值,而不是给我 return -值,否则给我 NA .

以下是阈值和 lag_days 的值:
threshold=c(2,4,6)
lag_day=c(1,2,3)

在这里我手动解决我的问题:
test<-df%>%
mutate(var_t1_lag1= ifelse(lag(return, n= lag_day[1] )>threshold[1],return, NA))%>%
mutate(var_t2_lag1= ifelse(lag(return, n= lag_day[1] )>threshold[2],return, NA))%>%
mutate(var_t3_lag1= ifelse(lag(return, n= lag_day[1] )>threshold[3],return, NA))%>%
mutate(var_t1_lag2= ifelse(lag(return, n= lag_day[2] )>threshold[1],return, NA))%>%
mutate(var_t2_lag2= ifelse(lag(return, n= lag_day[2] )>threshold[2],return, NA))%>%
mutate(var_t3_lag2= ifelse(lag(return, n= lag_day[2] )>threshold[3],return, NA))%>%
mutate(var_t1_lag3= ifelse(lag(return, n= lag_day[3] )>threshold[1],return, NA))%>%
mutate(var_t2_lag3= ifelse(lag(return, n= lag_day[3] )>threshold[2],return, NA))%>%
mutate(var_t3_lag3= ifelse(lag(return, n= lag_day[3] )>threshold[3],return, NA))

但是有没有一种解决方案可以让它变得更容易?也许有一个或两个应用功能?

这是我的示例数据框:
df <- tibble(
date= today()+0:12,
return=c(1,2.5,2,3,5,6.5,1,9,3,2,4,7,2)
)

最佳答案

一个选项是获取 'threshold'、'lag_day' 和 crossing 的所有组合。 ,然后遍历行(pmap),transmute创建感兴趣的列并与原始数据集绑定(bind)。这使用了 base R 中的一个函数(seq_along)

library(tidyverse)
crossing(threshold = seq_along(threshold), lag_day) %>%
pmap_dfc(~
df %>%
transmute(!! str_c("var_t", ..1, "_lag", ..2) :=
case_when(lag(return, n = ..2) > threshold[..1] ~ return,
TRUE ~ NA_real_))) %>%
bind_cols(df, .)

关于R根据两个不同的参数创建多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56240199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com