2017-05-10 16 views
0

我有一个包含多年观测数据的天气数据集。我想要做的是创建某种循环,这将允许我将我的原始数据集一般地划分为给定年份的子数据集。使用dplyr迭代子设置数据帧?

让我们调用我的数据集Weather_Data。下面是一些简单的示例数据:

Weather_Data 

Year GPS_Coord 
2012 x1 
2012 x2 
2013 x3 
2013 x4 
2014 x5 
2014 x6 
2015 x7 
2015 x8 

在试图建立某种形式的循环,我开始与一段代码,例如这样的:

Weather_Data_2012<-Weather_Data%>%filter(Year=="2012") 

此代码工作正常。当试图然而,建立某种形式的循环,我试着做这样的事情:

Year_list<-list() 
Year_sub<-as.character(c(2012:2015)) 

    for (i in 1:length(Year_sub)){ 
     Year_list[[i]]<-Weather_Data%>%filter(Year=="i")  
} 

当我执行这个代码,我结束了这样的输出:

A tibble: 0 × 11 

因此,很明显的循环没有按预期工作!

这里想什么,我通过这个代码来完成:

Year_list[[1]] 

Year GPS_Coord 
2012 x1 
2012 x2 

    Year_list[[2]] 

Year GPS_Coord 
2013 x3 
2013 x4 



    Year_list[[3]] 

Year GPS_Coord 
2014 x5 
2014 x6 

Year_list[[4]] 

Year GPS_Coord 
2015 x7 
2015 x8 

任何提示吗?谢谢。

+0

你需要做的'== Year_sub [我]而不是'==“我”'访问你年份列表'Year_sub'的元素'i'。 – Lamia

+7

你确定你需要创建一个这样的列表吗?我怀疑'group_by(Year)'可能会更简单地达到相同的结果,这是对'dplyr'中每个子集执行分析的标准方法。 – Marius

+7

我同意Marius--这是毫无意义的,因为你已经使用了dplyr并且它具有'group_by'功能。另外,'split(Weather_Data,Weather_Data $ Year)'会给你你想要的结果,根本没有包。 – thelatemail

回答

1

在第一个参数lapply迭代,每个值传递给定义的函数,以及构建结果列表,但@ thelatemail的分裂就是最好

lapply(unique(df$Year), function(yr) {df[df$Year==yr,]})