尝试为多个数据帧重复相同的代码
Trying to repeat the same code for multiple dataframes
我有以下代码,它接受一个名为 dft1 的数据帧,然后生成一个名为 dfb1 的结果数据帧。我想为多个输入数据帧重复相同的代码,例如 dft1、dft2,所有数据都由一个数字索引到最后,然后使用相同的模式存储结果,即 dfb1、dfb2、....
我尝试了很多方法,例如使用 dapply 或 for 循环,但鉴于内部代码的性质,我无法获得预期的结果。
#define the function for rolling
window <- 24
rolling_lm <-
rollify(.f = function(R_excess, MKT_RF, SMB, HML) {
lm(R_excess ~ MKT_RF + SMB + HML)
}, window = window, unlist = FALSE)
#rolling over the variable
dfb1 <-
dft1 %>%
mutate(rolling_ff =
rolling_lm(R_excess,
MKT_RF,
SMB,
HML)) %>%
mutate(tidied = map(rolling_ff,
tidy,
conf.int = T)) %>%
unnest(tidied) %>%
slice(-1:-23) %>%
select(date, term, estimate, conf.low, conf.high) %>%
filter(term != "(Intercept)") %>%
rename(beta = estimate, factor = term) %>%
group_by(factor)
在函数中添加要应用于每个数据帧的命令
apply_fun <- function(df) {
df %>%
mutate(rolling_ff =
rolling_lm(R_excess,
MKT_RF,
SMB,
HML)) %>%
mutate(tidied = map(rolling_ff,
tidy,
conf.int = T)) %>%
unnest(tidied) %>%
slice(-1:-23) %>%
select(date, term, estimate, conf.low, conf.high) %>%
filter(term != "(Intercept)") %>%
rename(beta = estimate, factor = term) %>%
group_by(factor)
}
现在将函数应用于每个数据框并将结果存储在列表中
n <- 10
out <- setNames(lapply(mget(paste0("dft", 1:n)), apply_fun), paste0("dfb", 1:n))
假设您有输入数据帧,例如 dft1
、dft2
...这将输出一个数据帧列表,您现在可以通过 out[['dfb1']]
、out[['dfb2']]
和很快。根据您拥有的 dft
个数据帧的数量更改 n
的值。
如果数据已经存在于列表中,我们可以通过
避免mget
setNames(lapply(result, apply_fun), paste0("dfb", 1:n))
我有以下代码,它接受一个名为 dft1 的数据帧,然后生成一个名为 dfb1 的结果数据帧。我想为多个输入数据帧重复相同的代码,例如 dft1、dft2,所有数据都由一个数字索引到最后,然后使用相同的模式存储结果,即 dfb1、dfb2、.... 我尝试了很多方法,例如使用 dapply 或 for 循环,但鉴于内部代码的性质,我无法获得预期的结果。
#define the function for rolling
window <- 24
rolling_lm <-
rollify(.f = function(R_excess, MKT_RF, SMB, HML) {
lm(R_excess ~ MKT_RF + SMB + HML)
}, window = window, unlist = FALSE)
#rolling over the variable
dfb1 <-
dft1 %>%
mutate(rolling_ff =
rolling_lm(R_excess,
MKT_RF,
SMB,
HML)) %>%
mutate(tidied = map(rolling_ff,
tidy,
conf.int = T)) %>%
unnest(tidied) %>%
slice(-1:-23) %>%
select(date, term, estimate, conf.low, conf.high) %>%
filter(term != "(Intercept)") %>%
rename(beta = estimate, factor = term) %>%
group_by(factor)
在函数中添加要应用于每个数据帧的命令
apply_fun <- function(df) {
df %>%
mutate(rolling_ff =
rolling_lm(R_excess,
MKT_RF,
SMB,
HML)) %>%
mutate(tidied = map(rolling_ff,
tidy,
conf.int = T)) %>%
unnest(tidied) %>%
slice(-1:-23) %>%
select(date, term, estimate, conf.low, conf.high) %>%
filter(term != "(Intercept)") %>%
rename(beta = estimate, factor = term) %>%
group_by(factor)
}
现在将函数应用于每个数据框并将结果存储在列表中
n <- 10
out <- setNames(lapply(mget(paste0("dft", 1:n)), apply_fun), paste0("dfb", 1:n))
假设您有输入数据帧,例如 dft1
、dft2
...这将输出一个数据帧列表,您现在可以通过 out[['dfb1']]
、out[['dfb2']]
和很快。根据您拥有的 dft
个数据帧的数量更改 n
的值。
如果数据已经存在于列表中,我们可以通过
避免mget
setNames(lapply(result, apply_fun), paste0("dfb", 1:n))