我如何循环连续 window?

How can i loop through a consecutive window?

我有一个这样的 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 中解决这个问题?

您可以使用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

您可以为此使用 dplyr 包。尝试:

library(dplyr)

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