r - 在每个循环中使用具有新日期范围的数据子集运行 For 循环
问题描述
所以我有一组日期和相应的值,我想通过 for 循环运行。挑战是我想在每次 for 循环运行时定义一组新的日期。这是为了测试领先和滞后变量。假设数据如下所示:
Date Y X
2000 Q1 100 1.5
2000 Q2 50 2
2000 Q3 75 -1
2000 Q4 25 0
2001 Q1 0 3
2001 Q2 1000 4
2001 Q3 40 1
2001 Q4 80 2
2002 Q1 0 0
2002 Q2 0 1
2002 Q3 500 1
2002 Q4 0 0
现在我如何编写一个 for 循环来每次选择一个新的日期范围,以便我可以回归 Y 与 X?我想这会是这样的:
for(i in (range of dates)){
test <- data %>% filter(Date > min(range of dates) &
Date < max(range of dates)
lm(Y~X, test)}
for 循环选择的数据样本如下所示:
Date Y X
2000 Q1 100 1.5
2000 Q2 50 2
2000 Q3 75 -1
2000 Q4 25 0
2001 Q1 0 3
2001 Q2 1000 4
2001 Q3 40 1
下一次迭代:
Date Y X
2001 Q1 0 3
2001 Q2 1000 4
2001 Q3 40 1
2001 Q4 80 2
2002 Q1 0 0
2002 Q2 0 1
2002 Q3 500 1
2002 Q4 0 0
因此,每次 for 循环运行时,它都会忽略第一年并选择一个新的年份继续样本的末尾。
解决方案
> library(tidyverse)
> df <- data.frame(
Date = c(
paste0('2000 Q', 1:4),
paste0('2001 Q', 1:4),
paste0('2002 Q', 1:4)
),
Y = c(
100, 50, 75, 25,
0, 1000, 40, 80,
0, 0, 500, 0
),
X = c(
1.5, 2, -1, 0,
3, 4, 1, 2,
0, 1, 1, 0
),
stringsAsFactors = FALSE
)
> df
Date Y X
1 2000 Q1 100 1.5
2 2000 Q2 50 2.0
3 2000 Q3 75 -1.0
4 2000 Q4 25 0.0
5 2001 Q1 0 3.0
6 2001 Q2 1000 4.0
7 2001 Q3 40 1.0
8 2001 Q4 80 2.0
9 2002 Q1 0 0.0
10 2002 Q2 0 1.0
11 2002 Q3 500 1.0
12 2002 Q4 0 0.0
> year_range <- df %>% transmute(
years = str_sub(
Date, start = 1L, end = 4L
)
) %>% unique() %>% pull() # Extract unique years
> for (cur_year in 1:(length(year_range) - 1)) {
test <- df %>% filter(
str_sub(
Date, start = 1L, end = 4L
) %in% c(
year_range[cur_year],
year_range[cur_year + 1]
)
)
print(
lm(
formula = Y ~ X,
data = test
)
)
}
从上面的 s 打印的输出lm
涵盖了这些年2000
-2001
然后2001
-2002
是
称呼: lm(公式 = Y ~ X, 数据 = 测试) 系数: (拦截)X -25.78 126.10 称呼: lm(公式 = Y ~ X, 数据 = 测试) 系数: (拦截)X -40.71 162.14
推荐阅读
- node.js - 尝试打开应用程序时 Heroku 错误代码 H13
- flutter - authStateChanges 仅在调试模式下有效
- python - 使用 libimobiledevice python 绑定的正确方法是什么?
- python - 具有固定主机名的 Kubernetes
- asp.net-core - 使用 UseSerilogRequestLogging 时,Serilog 时间戳在请求结束时,我可以覆盖它吗?
- c# - 错误 CS0411 ASP.NET Core Web 应用程序
- apache - 基于规则和错误类型 htaccess 的重定向
- sql - SQL Server Management Studio 会同步运行多个语句吗?
- asp.net-core - $.getJSON 给出未定义的结果(Razor 网页和 JSONresult)
- git - git config --global credential.helper 'cache' 的 git 凭证缓存有多安全?