2016-12-03 68 views
-1

我有30个数据集都是相同的,只为不同的公司。我想要的是为所有人完成一些基本任务,并且要求重复每个命令30次是相当苛刻的。我认为创建for循环会很好。但是,正如我所发现的,for循环无法使用字符变量。我试图谷歌任何东西或尽可能多地重写循环,但它没有带来任何令人满意的结果。如何创建多个数据集的循环

我会举一个关于相关函数的例子。

companies<-c("a", "b", "c") 
for(i in companies){ 
    correlations=cor(x = [i][4], y = [i][5],use="pairwise.complete.obs", method = "pearson") 
} 

这应该创建一个2个不同变量相关的向量。我试图用的代码的其他行为:

for(i in companies){ 
    e=paste(i) 
    correlations=cor(x = e[4], y = e[5],use="pairwise.complete.obs", method = "pearson") 
} 

但是什么我都试过没有工作。有什么技巧或功能可以帮助吗?感谢您的帮助和想法。

回答

2

这里有多个错误:

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:

的替代dplyrdata.table我个人觉得dplyrtidyverse更容易使用的大多数任务

P.P.S:上使用tidyverse管理多个型号 外观极好的谈话:https://www.youtube.com/watch?v=rz3_FDVt9eg

+0

为1:我意识到,当我再次阅读问题,但感谢你指出了这一点。 到2:非常感谢,这正是我所需要的,我不知道这样的功能对我的情况有效。 – Wister