2017-05-10 38 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,]})