这里有多个错误:
1.让我们开始与一般for
-loop结构:
companies<-c("a", "b", "c")
for(i in c){
我应该c
在这里? c
没有定义,所以[R解释c
作为函数c
(见?c
),我相信你一定不意味。
所以一个for循环总是通过需要的东西循环:列表,矢量...我猜你的意思是
companies<-c("a", "b", "c")
for(i in companies){
2.如何解决数据/公司:
您尝试通过[i]
获取数据。这对R没有意义。通常[
用于子集为你做正确的使用[4]
解决第四列。我猜你想要的是得到全局变量命名为“A”,“B”或“C”作为你companies
定义。为此,请使用get(i)
。
因此,假如你有你的全球环境3个变量(即如果键入a
的数据获取打印......),你可以这样做:
companies<-c("a", "b", "c")
for(i in companies){
cor(x = get(i)[4], y = get(i)[5],use="pairwise.complete.obs", method = "pearson")
}
要通过一个打印所有的人一个。
3.如何将结果保存在一个载体? 的方式你做
for(i in companies){
correlations = ...
}
在循环correlations
的每次迭代被分配一个新值。所以,你最终correlations
是最后公司的关系。
要保存结果,你可以做这样的事情:
现在correlations
与所有相关名为向量。
>>>如何改进此操作?
如果您想对多个相同结构对象(例如您的公司)执行相同的操作,最好将这些对象保存在列表中,然后对列表对象进行操作。
dat <- mget(companies)
my_cor <- function(x){
cor(x = x[4], y = x[5], use="pairwise.complete.obs", method = "pearson")
}
sapply(dat, my_cor) # gives you the list of your correlations
>>>如何进一步改善这个:
使用dplyr
包如下:
require(dplyr)
dat <- mget(companies)
dat <- bind_rows(dat, .id="company")
现在dat
是一个大data.frame这可以这样做包含您所有公司的信息。 DAT%>% GROUP_BY(公司)%>% 总结(相关性= COR(VARIABLE_NAME_1,VARIABLE_NAME_2,使用= “pairwise.complete.obs”,方法= “皮尔森”)
在这里看到的更多信息,在dplyr
-package:https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html
PS:
的替代dplyr
是data.table
我个人觉得dplyr
和tidyverse
更容易使用的大多数任务
。
P.P.S:上使用tidyverse
管理多个型号 外观极好的谈话:https://www.youtube.com/watch?v=rz3_FDVt9eg
为1:我意识到,当我再次阅读问题,但感谢你指出了这一点。 到2:非常感谢,这正是我所需要的,我不知道这样的功能对我的情况有效。 – Wister