如何利用r中的循环函数得到简洁的代码
整个数据包括5列,分别命名为A、B、C、D和Portfolio。我将为每个投资组合运行线性回归模型。因此,将整个数据划分为子集数据。然后,运行回归模型并检查其摘要。 数据框如下表所示如何利用r中的循环函数得到简洁的代码,r,loops,R,Loops,整个数据包括5列,分别命名为A、B、C、D和Portfolio。我将为每个投资组合运行线性回归模型。因此,将整个数据划分为子集数据。然后,运行回归模型并检查其摘要。 数据框如下表所示 A B C D Portfolio 1 ... 11 2 ... 22 3 ... 13 4 ...
A B C D Portfolio
1 ... 11
2 ... 22
3 ... 13
4 ... 11
5 ... 21
6 ... 21
7 ... 23
8 ... 12
9 ... 11
10 ... 12
11 ... 22
...
我所做的代码如下所示
Portfolio_11<-subset(df, Portfolio==11)
Portfolio_12<-subset(df, Portfolio==12)
Portfolio_13<-subset(df, Portfolio==13)
Portfolio_21<-subset(df, Portfolio==21)
Portfolio_22<-subset(df, Portfolio==22)
Portfolio_23<-subset(df, Portfolio==23)
Reg_11<-lm(A ~ B + C + D, data=Portfolio_11)
Reg_12<-lm(A ~ B + C + D, data=Portfolio_12)
Reg_13<-lm(A ~ B + C + D, data=Portfolio_13)
Reg_21<-lm(A ~ B + C + D, data=Portfolio_21)
Reg_22<-lm(A ~ B + C + D, data=Portfolio_22)
Reg_23<-lm(A ~ B + C + D, data=Portfolio_23)
summary(Reg_11)
summary(Reg_12)
summary(Reg_13)
summary(Reg_21)
summary(Reg_22)
summary(Reg_23)
Portfolio_11我们可以使用group by函数中的一个
library(data.table)
dtSummary <- setDT(df)[, list(list(summary(lm(A ~ B + C + D)))), by = Portfolio]
dtSummary$V1
库(data.table)
dtSummary使用base R,您可以尝试:
#creates your combinations
subs <- apply(expand.grid(1:3, 1:2), 1, function(x) as.numeric(paste0(x, collapse="")))
# loop along these combinations. Note the print.
for (i in subs)
print(summary(lm(A ~ B + C + D, data=subset(df, Portfolio==i))))
#创建您的组合
subs为了让自己的生活更轻松,可以使用其中一个R包进行数据挖掘。Akrun已经提到data.table;这也是dplyr的do
的经典用例:
library(dplyr)
df %>%
group_by(Portfolio) %>%
do(smry=summary(lm(A ~ B + C + D, data=.)))
这是split-apply组合方法的一个经典案例,或者至少是split-apply部分,因为不清楚要对输出执行什么操作。在base R中有一种方法可以做到这一点,即在名为摘要的列表中返回结果:
Summaries <- lapply(split(df, df$Portfolio), function(i) summary(lm(A ~ B + C + D, data = i)))
总结你能把它变成一个?
library(dplyr)
df %>%
group_by(Portfolio) %>%
do(smry=summary(lm(A ~ B + C + D, data=.)))
Summaries <- lapply(split(df, df$Portfolio), function(i) summary(lm(A ~ B + C + D, data = i)))