[英]Apply a custom function to each cell of a dataframe
我有一个 dataframe,如下所示:
> tail(RD_exp)
ISIN FR0000121014 CH0038863350 NL0010273215 CH0012032048 FR0000120321 GB00BP6MXD84 CH0012005267 GB0009895292 DK0060534915
15 2016 111000 1596405 639493 9107599 849800 918704 7638916 5715795 1828103
16 2017 130000 1608219 1155900 9693157 877100 809387 7603263 4869596 1785748
17 2018 130000 1441758 1239800 9441933 914400 836828 7247722 4458881 1822380
18 2019 140000 1483751 1553700 10373832 985300 860653 7391073 4633743 1806029
19 2020 139000 1449832 1579900 11178244 964400 790587 7285164 5564538 1835092
20 2021 147000 1544082 1861600 12673490 1028700 690794 7647094 6493563 2188763
t <- nrow(RD_exp)
t
[1] 20
我想将以下公式应用于每一列,这是第 3 列最后一年的示例:
RD_Cap_t <- RD_exp[t-2,3] + 0.8*RD_exp[t-3,3] + 0.6*RD_exp[t-4,3] + 0.4*RD_exp[t-5,3] + 0.2*RD_exp[t-6,3]
此外,我不仅要计算 t 的 RD_Cap,还要计算 t 之前的所有其他年份。
有可能这样做吗?
提前致谢!
一种选择是使用tidyverse
的mutate
和across
。 我重复提供的数据两次,以便有足够的行来使用目标 function 中所需的 6 个滞后。而且我没有将 function 应用于列ISIN
。 如果它确实应该应用于所有列,只需指定across(everything(), ...)
即可。
library(tidyverse)
RD_exp <- read.table(text =
" ISIN FR0000121014 CH0038863350 NL0010273215 CH0012032048 FR0000120321 GB00BP6MXD84 CH0012005267 GB0009895292 DK0060534915
15 2016 111000 1596405 639493 9107599 849800 918704 7638916 5715795 1828103
16 2017 130000 1608219 1155900 9693157 877100 809387 7603263 4869596 1785748
17 2018 130000 1441758 1239800 9441933 914400 836828 7247722 4458881 1822380
18 2019 140000 1483751 1553700 10373832 985300 860653 7391073 4633743 1806029
19 2020 139000 1449832 1579900 11178244 964400 790587 7285164 5564538 1835092
20 2021 147000 1544082 1861600 12673490 1028700 690794 7647094 6493563 2188763"
)
#make table long enough for 6 lags
RD_exp2 <- bind_rows(RD_exp, RD_exp) %>%
dplyr::mutate(ISIN = 2010:2021)
rownames(RD_exp2) <- NULL
RD_exp2 %>%
dplyr::mutate(
across(-ISIN,
function(x) {
lag(x, 2) + 0.8 * lag(x, 3) + 0.6 * lag(x, 4) + 0.4 * lag(x, 5) + 0.2 * lag(x, 6)
})
)
ISIN FR0000121014 CH0038863350 NL0010273215 CH0012032048 FR0000120321
1 2010 NA NA NA NA NA
2 2011 NA NA NA NA NA
3 2012 NA NA NA NA NA
4 2013 NA NA NA NA NA
5 2014 NA NA NA NA NA
6 2015 NA NA NA NA NA
7 2016 403200 4464456 4156999 30841252 2822080
8 2017 420200 4492545 4784840 33555789 2932580
9 2018 394000 4583422 3946153 31991257 2828400
10 2019 390600 4688475 3727154 31129394 2756980
11 2020 387200 4593775 3608836 29966063 2730320
12 2021 395800 4549467 3867197 29921010 2788740
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.