我如何循环连续 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))
我有一个这样的 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))