我如何循环连续窗口?

时间:2016-10-17 19:32:25

标签: r loops for-loop regression

我有这样的df:

 > df
   symbol   x1      x2
1       A   3.6    5.2
2       A  10.0    4.8
3       A   5.2    0.2
4       A -10.2    0.4
5       A   5.4   -2.5
6       B   9.9    6.5
7       B  15.8   -1.8
8       B   4.5   -5.9
9       C  -2.0    0.5
10      C -10.0    2.6
11      C   7.7    8.9
12      C  10.5   18.5

我想逐个符号地计算x1和x2之间的r平方,所以我想得到一个像这样的新df

  symbol r squared
1 A      0.27
2 B      0.30
3 C      0.68

我使用ifelse但它不起作用。

for (i in 1:12){
            results[i] <- ifelse(df$symbol == symbollist[i], summary(lm(df$x1~df$x2))$r.squared,0)
           }

如何解决R?

中的这个问题

2 个答案:

答案 0 :(得分:1)

您可以使用by为每个符号执行lm

by(df, df$symbol, function(x) summary(lm(x1~x2, x))$r.squared)

df$symbol: A
[1] 0.07445258
----------------------------------------------------------------------------------------------------------- 
df$symbol: B
[1] 0.09014209
----------------------------------------------------------------------------------------------------------- 
df$symbol: C
[1] 0.687236

答案 1 :(得分:0)

您可以使用dplyr包。尝试:

library(dplyr)

result <- df %>%
              group_by(symbol) %>%
                  summarize(cor(x1, x2))