我有这样的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?
中的这个问题答案 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))